Tôi nhận được một vi phạm ràng buộc nước ngoài khi cố xóa một thực thể, có chứa các liên kết một-nhiều-hướng một chiều. Tôi có lớp đơn giản sau đây:Doctrine2 - Không thể xóa một thực thể có quan hệ oneToMany đơn hướng
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;
}
Đối tượng Car
không nên chứa một mối quan hệ với chủ sở hữu trong trường hợp này (vì thế mối quan hệ một chiều). Nếu tôi cố gắng xóa một đối tượng Dealer
chứa các hiệp hội để xe, tôi nhận được vi phạm ràng buộc sau:
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`))'
tôi sẽ nhận được thông báo tương tự nếu tôi đã cố gắng để xóa các hàng đại lý thủ công từ bảng cơ sở dữ liệu, nhưng tôi nghĩ Giáo lý, sử dụng cascade = "remove", sẽ giải quyết vấn đề này cho tôi.
Nếu tôi thay đổi liên kết thành liên kết hai chiều, nó hoạt động. Tại sao điều này không làm việc với các hiệp hội một chiều?
một chiều one-to-many liên kết? điều này trông giống như hai hướng nhiều đối với tôi: D Bạn đã thả cơ sở dữ liệu của mình và tạo lại hay bạn có bất kỳ đồ đạc/dữ liệu dư thừa nào trong cơ sở dữ liệu khi bạn thay đổi lược đồ? – nifr
bạn muốn xóa đại lý mà không bị mất xe, tôi có được quyền này không? – nifr
Đó là định nghĩa của Doctrines về một chiều đối với một người. Nó là một nhiều - nhiều với một ràng buộc duy nhất. Tôi muốn xóa xe, khi đại lý cũng bị xóa. –