Trong Doctrine mới nhất trên Symfony2 cố gắng tìm ra nhiều mối quan hệ hai chiều giữa hai đối tượng.Doctrine multiple OneToMany/ManyToOne vi phạm ràng buộc toàn vẹn hai chiều
Đối tượng chủ sở hữu có một địa chỉ bưu chính và sau đó nhiều địa chỉ phụ trong bộ sưu tập và tôi xóa() Person, tôi muốn tất cả địa chỉ của nó cũng bị xóa (nhưng xóa địa chỉ sẽ không xóa một người), nhưng tôi nhận được lỗi này -
An exception occurred while executing 'DELETE FROM address WHERE id = ?' with
params {"1":"fb5e47de-2651-4069-b85e-8dbcbe8a6c4a"}:
[PDOException] SQLSTATE[23000]: Integrity constraint violation: 1451
Cannot delete or update a parent row: a foreign key constraint fails
(`db`.`address`, CONSTRAINT `FK_633704 C29C1004E`
FOREIGN KEY (`person_id`) REFERENCES `person` (`id`))
trong
class Person
{
/**
* @var Address postalAddress
*
* @ORM\OneToOne(targetEntity="Address", cascade={"all"}, orphanRemoval=true)
* @ORM\JoinColumn(onDelete="cascade")
*/
private $postalAddress;
/**
* @var \Doctrine\Common\Collections\Collection otherAddresses
*
* @ORM\OneToMany(targetEntity="Address", mappedBy="person", cascade={"all"}, orphanRemoval=true)
*/
private $otherAddresses;
}
class Address
{
/**
* @var Person person
*
* @ORM\ManyToOne(targetEntity="Person", inversedBy="postalAddress, otherAddresses")
* @ORM\JoinColumn(nullable=false)
*/
private $person;
}
tôi nghĩ nó có thể vì
inversedBy="postalAddress, otherAddresses"
Tôi không nghĩ rằng nhiều inversedBy được hỗ trợ; sau đó tôi cũng đã cố gắng thay đổi
@ORM\JoinColumn(nullable=false)
để có thể vô hiệu, nhưng tôi vẫn gặp lỗi.
Điều này rõ ràng không phải là về ví dụ về người/địa chỉ tầm thường nhưng cái gì phức tạp hơn, nhưng đây là nỗ lực tốt nhất của tôi khi trừu tượng hóa.
Tôi chắc chắn tôi đã bỏ lỡ điều gì đó hiển nhiên. Có ai giúp được không?
Tôi nghĩ rằng vấn đề có thể là bạn đang cố gắng nói rằng nhiều người được OneversOne đảo ngược chứ không phải là ManyToOne. Bạn đã thử '* @ORM \ ManyToOne (targetEntity =" Person ", inversedBy =" otherAddresses ") * @ORM \ OneToOne (targetEntity =" Person ") * @ORM \ JoinColumn (nullable = false)' Nó có thể thay đổi cách học thuyết xử lý các tầng, mặc dù nó không thay đổi lược đồ. –