関連フィールドのsymfony2でDoctrineライフサイクルイベントを受け取る方法はありますか? http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/events.html#lifecycle-events
例えば:
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;
したがって、ユーザーエンティティhttp://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.htmlのイベントリスナーを作成すると
Entity\Group が Entity\User に追加されると、Listener が呼び出されます。
注: この機能を取得する唯一の方法は、Entity\UserGroup を作成し、Users PostPersist の代わりにその postPersist を監視することです。
それがエンティティの関連付けをリッスンする唯一の方法ですか?
答えを更新してください!Association の Owner は、Association フィールドの更新中に呼び出されますが、Event Args からの getEntityChangeSet にはありません。Entity Manager の Unit of Work から getScheduledCollectionUpdates を取得する必要があります。例えば:
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
}
}
}
}