Podczas próby usunięcia obiektu zawierającego jednokierunkowe powiązania jeden-do-wielu uzyskuję obce naruszenie. Mam następującą prostą klasę:Doctrine2 - Nie można usunąć obiektu z jednokierunkową relacją OneToany
class Dealer{
/**
* @ManyToMany(targetEntity="Car", cascade={"persist", "remove"})
* @JoinTable(name="dealer_cars",
* joinColumns={@JoinColumn(name="dealer_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="car_id", referencedColumnName="id",
unique=true)}
* )
**/
protected cars;
}
Przedmiotem Car
nie powinien zawierać stosunku do jego właściciela, w tym przypadku (stąd relacja jednokierunkowa). Gdy próbuję usunąć Dealer
obiekt zawierający stowarzyszenia do samochodów, pojawia się następujący wiązania naruszenie:
Cannot delete or update a parent row: a foreign key constraint fails
(`application`.`dealer_cars`, CONSTRAINT `FK_E1BCEEEBC3C6F69F`
FOREIGN KEY (`car_id`) REFERENCES `car` (`id`))'
by uzyskać ten sam komunikat, jeśli próbowałem ręcznie usunąć wiersz sprzedawcy z tabeli bazy danych, ale myślałem, Doctrine, używając cascade = "remove", zajmie się tym dla mnie.
Jeśli zmienię powiązanie na połączenie dwukierunkowe, działa. Dlaczego nie działa to w przypadku skojarzeń jednokierunkowych?
jednokierunkowa jeden-do-wielu stowarzyszenia? wygląda to bardziej jak dwukierunkowe wiele do wielu: D Czy porzuciłeś bazę danych i odtworzyłeś lub czy w bazie danych zmieniłeś schemat, czy też masz jakieś resztki urządzeń/danych? – nifr
chcesz usunąć dealera bez utraty samochodu, czy mam to prawo? – nifr
Jest to definicja Doktryny jednokierunkowej jeden do wielu. Jest to wiele-do-wielu z unikalnym ograniczeniem. Chcę usunąć samochód, gdy dealer również zostanie usunięty. –