Symfony2教义2关于协会的后期翻译

Symfony2教义2关于协会的后期翻译,symfony,doctrine-orm,Symfony,Doctrine Orm,是否有方法在symfony2中接收关联字段的条令生命周期事件? 例如: Entity\User.php .. /** * @ORM\ManyToMany(targetEntity="Group", inversedBy="users", cascade={"persist"}) * @ORM\JoinTable(name="users_groups", * joinColumns={@ORM\JoinColumn(name="user_id", referencedColu

是否有方法在symfony2中接收关联字段的条令生命周期事件?

例如:

Entity\User.php
..

 /**
 * @ORM\ManyToMany(targetEntity="Group", inversedBy="users", cascade={"persist"})
 * @ORM\JoinTable(name="users_groups",
 *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id", onDelete="CASCADE")}
 * )
 */
protected $groups;
因此,当我为用户实体创建事件侦听器时

将实体\组添加到实体\用户时,将调用侦听器

注意:获取此功能的唯一方法是创建实体\用户组,并监视该postPersist,而不是用户postPersist。

这是监听实体关联的唯一方法吗

更新答案! 关联的所有者在更新关联字段期间确实会被调用,但不在事件参数的getEntityChangeSet中。您必须从实体管理器中的工作单元获取GetScheduledCollectionUpdate。例如:

EventListener\PostEventListener
..

public function postUpdate(LifecycleEventArgs $args)
{
  $this->handlePostEvents($args);
}


public function postPersist(LifecycleEventArgs $args)
{
  $this->handlePostEvents($args);
}

public function handlePostEvents(LifecycleEventArgs $args){
  $entity = $args->getEntity();
  $em = $args->getEntityManager();

  if ($entity instanceof User) {
    $uow = $em->getUnitOfWork();
    foreach ($uow->getScheduledCollectionUpdates() AS $col) {
      if ($col->first() instanceof Group) {
        // ADD CODE HERE
      }
    }
  }
}