Php 如何警告将要更新的多对多关系?
我想在特定字段更新时进行特定处理 显而易见的方法是使用事件预更新,并查看哪些字段被更新。它很好用。。。除了多对多字段。它触发事件,但变更集为空Php 如何警告将要更新的多对多关系?,php,symfony,events,doctrine,Php,Symfony,Events,Doctrine,我想在特定字段更新时进行特定处理 显而易见的方法是使用事件预更新,并查看哪些字段被更新。它很好用。。。除了多对多字段。它触发事件,但变更集为空 /** * @ORM\PreUpdate */ public function updateDate(PreUpdateEventArgs $event){ $changeSet = $event->getEntityChangeSet(); $res = ""; foreach($changeSet as $key =&
/**
* @ORM\PreUpdate
*/
public function updateDate(PreUpdateEventArgs $event){
$changeSet = $event->getEntityChangeSet();
$res = "";
foreach($changeSet as $key => $change){
$line = $key." : ".$event->getOldValue($key)." || ".$event->getNewValue($key);
$res .= $line;
}
}
在$res中,除多对多字段外,所有“我的”字段都被修改
此外,我尝试在侦听器中执行此操作,但我找不到如何提取从entityManager更新的字段
多谢各位
更多信息:
来自更新实体的关系:
/**
* @var Status
*
* @ORM\ManyToMany(targetEntity="User", inversedBy="projectsSupervisor", cascade={"persist"})
* @ORM\JoinTable(name="projects_supervisors")
*/
protected $supervisors;
另一方面:
/**
* @var Project
*
* @ORM\ManyToMany(targetEntity="Task", mappedBy="users")
*/
protected *tasks
Symfony版本:3.1.10无法跟踪对多对多关联所做的更改。见: 仅对关联的反面所做的更改将被忽略。 确保更新双向关联的两侧(或在 从学说的角度来看,至少是拥有方) 此外,::getEntityChangeSet()仅对常规字段有用,而不是关联。对于一对多关联,可以使用
$unitOfWork->getScheduledCollectionUpdates()
:
可以在我的github存储库“”中查看一个实际示例,该存储库(第196行+)
foreach ($uow->getScheduledCollectionUpdates() as $collectionUpdate) {
/** @var $collectionUpdate \Doctrine\ORM\PersistentCollection */
if ($collectionUpdate->getOwner() === $entity) {
// This entity has an association mapping which contains updates.
$collectionMapping = $collectionUpdate->getMapping();
print_r($collectionMapping); // Investigate this further
}
}