如果编辑了2个特定属性中的一个,我在preUpdate上有一个监听器来执行操作。
对于其中一个,我很容易使用$uow->getScheduledCollectionUpdates()
,但第二个字段是ManyToMany关系,目前我发现它public function preUpdate(PreUpdateEventArgs $args)
{
$strain = $args->getEntity();
if (!$strain instanceof Strain) {
return;
}
$em = $args->getEntityManager();
$uow = $em->getUnitOfWork();
$authorizedUsersChanged = false;
foreach ($uow->getScheduledCollectionUpdates() as $entityScheduledUpdates) {
// I can't do it because the method: 'getBackRefFieldName()' doen't exists
if ('authorizedUsers' === $entityScheduledUpdates->getBackRefFieldName()) {
$authorizedUsersChanged = true;
break;
}
}
if ($args->hasChangedField('public') || $authorizedUsersChanged) {
dump('do something');
}
}
return;
}
返回链接采集。在这个集合中,我想控制字段,并且有一个非常有趣的属性:backRefFieldName。但是没有方法来获得它并进行控制。
也许还有其他解决方案?
public function preUpdate(PreUpdateEventArgs $args)
{
$strain = $args->getEntity();
if (!$strain instanceof Strain) {
return;
}
$em = $args->getEntityManager();
$uow = $em->getUnitOfWork();
$updateElasticsearch = false;
if (true === $args->hasChangedField('public')) {
$updateElasticsearch = true;
} else {
foreach ($uow->getScheduledCollectionUpdates() as $entityScheduledUpdates) {
if ('authorizedUsers' === $entityScheduledUpdates->getMapping()['fieldName']) {
$updateElasticsearch = true;
break;
}
}
}
if (true === $updateElasticsearch) {
// DO something
}
return;
}
编辑:最后我这样做,但如果有更好的方式,我感兴趣
<batch-execution lookup="defaultKieSession">
<insert out-identifier="message" return-object="true" entrypoint="DEFAULT">
<de.salt.d4s.test2.test2.input>
<order>1</order>
</de.salt.d4s.test2.test2.input>
</insert><fire-all-rules></fire>
</batch-execution>