Symfony2 の最新の Doctrine では、2 つのオブジェクト間の複数の双方向関係を解決しようとしています。
個人所有者オブジェクトには、1 つの郵便住所と、コレクション内の複数のセカンダリ アドレスがあり、個人を remove() します。そのすべての住所も削除する必要があります (ただし、住所を削除しても個人は削除されません)。このエラーが発生する -
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`))
の
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;
}
私はそれが原因かもしれないと思った
inversedBy="postalAddress, otherAddresses"
複数の inversedBy はサポートされていないと思います。それから私も変えようとしました
@ORM\JoinColumn(nullable=false)
nullableにしますが、それでもエラーが発生します。
これは明らかに些細な人/住所の例ではなく、より複雑なものですが、これは抽象化に対する私の最善の試みでした。
私は明らかな何かを見逃したと確信しています。誰でも助けることができますか?