4

教義にこのようなものを持たせる方法はありますか?

class Entity {

    /**
     * @Column(name="related_entity_id")
     */
    private $relatedEntityId;

    /**
     * @ManyToOne(targetEntity="RelatedEntitiy")
     * @JoinColumn(name="related_entity_id", referencedColumnName="id")
     */ 
    private $relatedEntity;
}

私がしたいこと私はこのようなことをします:

Entity :: setRelatedEntityId($ someId)を呼び出し、エンティティを永続化し、Entity :: getRelatedEntity()を呼び出して、エンティティに関連エンティティを返すようにします。

関連するエンティティは、厳密に制限され、実行時に動的に拡大することはないテーブルから選択されるため、関連するエンティティIDの数には限りがあります。

新しいエンティティを作成するときに、関連するエンティティIDを設定したいのですが、データベースから関連するエンティティ全体をフェッチする必要はありません。

これをテストできる限り、これは機能しません。relatedEntityIdを設定したが、relatedEntityを設定しなかった場合、基本的に関係が確立されていないため、Doctrineはrelated_entity_id列を自動的にnullに設定します。

私もこのようなことをしようとしました:

relatedEntityIdプロパティを削除し、

Entity::setRelatedEntity(new RelatedEntity($relEntId))

RelatedEntityのコンストラクターはIDを設定しますが、他の値は設定しません。RelatedEntityを永続化したくありません(その値は指定された$ relEntIdのDBにすでに設定されています)が、永続化されていないエンティティがあるため、今回はDoctrineがフラッシュ時にエラーを通知します。

基本的に、私がやりたいのは、関連するエンティティのID以外は何も知らずに関係を作成することです。これを行うことができる他の方法がある場合は、共有してください。

前もって感謝します

編集:

回避策を見つけました。RelatedEntitiesは不変オブジェクトの限定されたセットになるため、次のことを行いました。

  1. entityManagerを使用して、すべてのRelatedEntitiesを検索します。
  2. 新しいエンティティを作成するオブジェクトにリストを挿入します
  3. 新しいエンティティを作成するときは、リストからRelatedEntitiesの1つをRelatedEntityとして選択します

誰かがもっと良いものを思いついた場合に備えて、質問を1日か2日開いたままにしておきます。

4

3 に答える 3

5

エンティティプロキシを使用します。

Entity::setRelatedEntity($entityManager->getReference('RelatedEntity', $relEntId))
于 2012-05-28T07:12:29.137 に答える
2

私はこれがあなたが説明したように機能することになっているとは思わない:)

追加するエンティティはDoctrine管理対象オブジェクトである必要があるため、最初に一連find()のメソッドを使用して自分でエンティティをロードする必要があります。

于 2012-05-28T07:00:46.653 に答える
0

Doctrine 2での私の経験に基づいて、ここでさらに詳しく説明しますhttp://ssmusoke.wordpress.com/2012/03/25/doctrine2-day-3-proxies-associations-relationships/

私のアプローチは次のとおりです。

a)$relatedEntityプロパティのみを持つ

b)$ relatedEntityからid値を返すgetRelatedEntityId()関数を追加します

c)$ relatedEntityオブジェクトを設定するsetRelatedEntityId()を追加します-データベースからロードする必要がある場合があり、関連エンティティのIDしかない場合に他のレイヤーを汚染するのを防ぎます

d)getRelatedEntity()およびsetRelatedEntity()関数を追加します

ボトムライン:Doctrineが混乱するため、外部キー列とマップされたプロパティのプロパティを持つことはできません

于 2012-05-28T07:13:53.160 に答える