0

たとえば、2 つのエンティティがeventあり、user両方にManyToMany関係があります。

class Event {

/**
 * @Id @Column(type="integer") @GeneratedValue
 */
protected $id;
/**
 * @ManyToMany(targetEntity="User", inversedBy="participated_events")
 */
protected $participations;
}

class User {

/**
 * @Id @Column(type="integer") @GeneratedValue
 * */
protected $id;
/**
 * @ManyToMany(targetEntity="Event", inversedBy="participations")
 */
protected $participated_events;
}

参加を介して相互に関連しているかどうかを確認する$em->getRepository('event')->find(RANDOM_ID)にはどうすればよいですか? $em->getRepository('user')->find(RANDOM_ID)つまり、ユーザーがこのイベントに参加しているかどうかを確認する方法は? 最善の方法は何ですか?参加したすべてのイベントを取得して確認できることは知っていforeach()ますが、もっと簡単な方法である必要があると思います。

ありがとう。

4

1 に答える 1

1

カスタムリポジトリDQLを作成し、実行するフィールドを選択する必要があります。;

個人的には、join_tableに追加の列が必要な場合も同様に、やりたいことを実行する方が簡単なので、多対多の関係の教義を避けています。したがって、ほとんどの場合、対応するmanyTooneおよびonetoMany参照を使用して結合エンティティを作成します。したがって、あなたのインスタンスでは、manyToOneユーザーとmanyToOneイベント(およびそれらのターゲットエンティティoneToMany)を持つParticipatedEventエンティティがあります。あなたは関係を持っていますが、追加の参加モデル(またはエンティティ)があります

したがって、最終的には次のようになります。

   $particpated_event = $em->getRepository('ParticipatedEvents')->findOneBy('event_id'=>RANDOM_ID, 'user_id'=>RANDOM_USER_ID);
   if($particpated_event) {
       $event =  $particpated_event->getEvent(); //or get user.
   }

そして、あなたはこのようなことをすることができます

$particpated_events = $em->getRepository('event')->find(RANDOM_ID)->getParticipatedEvents();
foreach( $particpated_events as  $particpated_event){

      $user = $particpated_event->getUser();
  }

もう一度、あなたに最適なものを見てください。前述のように、DQLクエリを使用してリポジトリクラスを作成できます

于 2012-12-02T17:00:56.593 に答える