外部エンティティを介したアイデンティティがサポートされているDoctrine 2.1を使用しています(識別子としての外部キー)。
双方向の関係を持つ外部エンティティを介して識別できますか? 試していますが、データ フィクスチャをロードするときに次のエラーが発生します。
[PDO例外]
SQLSTATE[23000]: 整合性制約違反: 1452 子行を追加または更新できません: 外部キー制約が失敗しました (
table
.user
, CONSTRAINTFK_187DDE86BF396750
FOREIGN KEY (id
) REFERENCESaddress
(user_id
))
ここに私のエンティティがあります:
/**
* @Entity
*/
class User
{
/** @Id @Column(type="integer") @GeneratedValue */
private $id;
/** @OneToOne(targetEntity="Address") */
private $address;
}
/**
* @Entity
*/
class Address
{
/** @Id @OneToOne(targetEntity="User") */
private $user;
}
User から Address への参照を削除すると、エラーが消えます!
私は次のことができるようにしたいと思います:
$address = $user->getAddress();
..しかし、私はしなければならないようです:
$address = $entityManager->find('Address', $user->getId());
そうですか?これを行う方法はありますか?
更新 1:
どちらの側からも関係を設定できるようにしたいのですが (双方向)、これは不可能のようです。
正直なところ、「関連付けの逆側のみに加えられた変更は無視される」ため、関係の逆側のポイントが何なのかわかりません。
ここのドキュメントから引用: http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/association-mapping.html#owning-side-and-inverse-side
ポイントは?
アプリケーションの観点からは、次のことを行う方が理にかなっているようです。
$user->setAddress($address);
それよりも:
$address->setUser($user);
ただし、次の理由により、最初の方法は不可能です。
- 関係を双方向ブレーキにする
User
側面は反対側でなければならないので、とにかく$user->setAddress($address);
無視されます!!
誰かがこれを説明してくれませんか:)
マシュー