文件说:
刷新操作不再识别对已传递实体的字段的更改,使用传递给事件的计算更改集来修改原始字段值.
但它也说:
getEntityChangeSet()获取变更集数组的副本.对此返回数组的更改不会影响更新.
这是否意味着我无法在preUpdate事件监听器中更改实体的字段?如果没有,我将如何完成此更新?
Dav*_*idW 34
显然,您需要自行重新计算变更集才能使更改生效:
$em = $args->getEntityManager();
$uow = $em->getUnitOfWork();
$meta = $em->getClassMetadata(get_class($entity));
$uow->recomputeSingleEntityChangeSet($meta, $entity);
Run Code Online (Sandbox Code Playgroud)
小智 5
或者,您可以使用PreUpdateEventArgs类(http://www.doctrine-project.org/api/orm/2.2/class-Doctrine.ORM.Event.PreUpdateEventArgs.html).例如:
public function preUpdate(PreUpdateEventArgs $args)
{
$entity = $args->getEntity();
if ($entity instanceof Product)
{
$args->setNewValue(
"discount",
123
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9344 次 |
| 最近记录: |