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 中添加额外的列。所以,我几乎总是用对应的 manyTo one 和 onetoMany 引用创建一个连接实体。所以在你的实例中会有一个 ParticipatedEvent 实体,它有 manyToOne 用户和 manyToOne 事件(以及他们的目标实体 oneToMany)你仍然有你的关系,但你有额外的加入模型(或实体)

所以,你最终是这样的:

   $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 回答