0

外部エンティティを介したアイデンティティがサポートされているDoctrine 2.1を使用しています(識別子としての外部キー)。

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/tutorials/composite-primary-keys.html#identity-through-foreign-entities

双方向の関係を持つ外部エンティティを介して識別できますか? 試していますが、データ フィクスチャをロードするときに次のエラーが発生します。

[PDO例外]

SQLSTATE[23000]: 整合性制約違反: 1452 子行を追加または更新できません: 外部キー制約が失敗しました ( table. user, CONSTRAINT FK_187DDE86BF396750FOREIGN KEY ( id) REFERENCES address( 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);

ただし、次の理由により、最初の方法は不可能です。

  1. 関係を双方向ブレーキにする
  2. User側面は反対側でなければならないので、とにかく$user->setAddress($address);無視されます!!

誰かがこれを説明してくれませんか:)

マシュー

4

2 に答える 2

0

User エンティティで定義されたアドレス フィールドのゲッターはありますか?

public function getAddress()
{
  return $this->address;
}

教義は常にコレクションを返すことに注意してください。

于 2012-08-31T07:34:45.940 に答える