1

Doctrine v2.2.1 を使用しています。YML で定義されたエンティティを使用。

ここでは、特定の関連付けで相互に参照している 2 つのエンティティがあります。

entities\User:
  type: entity
  table: user
  oneToMany:
    subjectNews:
      targetEntity: entities\News
      mappedBy: subjectUser
      cascade: ["all"]
    actionNews:
      targetEntity: entities\News
      mappedBy: actionUser
      cascade: ["all"]

entities\News:
  type: entity
  table: news
  manyToOne:
    subjectUser:
      targetEntity: entities\User
      cascade: ["all"]
      nullable: true
    actionUser:
      targetEntity: entities\User
      cascade: ["all"]
      nullable: true

これらの定義に従ってエンティティ クラスを生成すると、entities\User php クラスで予期しない結果が得られます。どちらが好きですか;

 /**
  * Add subjectNews
  *
  * @param entities\News $subjectNews
  * @return User
  */
 public function addNews(\entities\News $subjectNews)
 {
     $this->subjectNews[] = $subjectNews;
     return $this;
 }

エンティティのセッター メソッドは期待どおりに生成されます。ただし、entities\User の add メソッドは期待どおりに生成されません。

私は何か間違ったことをしていますか?または、これに対する回避策はありますか?それともDoctrine2 の Limitations and Known Issues doc で言及されている問題に関連していますか?

平和

4

1 に答える 1

2

これは、Doctrine ORM を使用して遭遇した問題の 1 つでもあります。これに対する洗練された解決策はわかりませんが、get メソッドを使用して ORM コレクションを取得し、必要なエンティティを追加するだけでよいことはわかっています。例は、

$actionNews = $user->getActionNews();
$actionNews[] = new entities\News();

またはsubjectNews

$subjectNews = $user->getSubjectNews();
$subjectNews[] = new entities\News();

お役に立てれば..

于 2012-04-17T19:03:56.070 に答える