我有一个1:m
之间的关系Subitem
and SubitemColor
。现在我想将一些数据保存在onFlush
修改一些数据SubitemColor
。问题:执行控制器时我收到以下错误消息,您也可以在下面看到:
执行“INSERT INTO SubitemColor”时发生异常
(代码、precio、pvp_推荐、文件名、activado、en_stock、区域、
Lets_fix_width_or_height_in_list,lets_fix_width_or_height_in_show,
position_level_0、position_level_1、position_brand、subitem_id、
color_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)' 与
参数[2]:
SQLSTATE[HY093]:无效的参数数量:绑定变量的数量
与令牌数量不匹配
public function onFlush(Event \OnFlushEventArgs $eventArgs)
{
$em = $eventArgs->getEntityManager();
$uow = $em->getUnitOfWork();
$updates = $uow->getScheduledEntityUpdates();
$insertions = $uow->getScheduledEntityInsertions();
/////////// NEW SUBITEM_IMAGE OR SUBITEM_COLOR UPLOADED //////////
foreach ($insertions as $entity) {
if ($entity instanceof SubitemColor) {
//$entity->setLetsFixWidthOrHeightInList("jander");
//$entity->setLetsFixWidthOrHeightInList('width');
//$entity->setLetsFixWidthOrHeightInShow('width');
$entity->setEnStock(2);
$metaSubitemColor = $em->getClassMetadata(get_class($entity));
$uow->computeChangeSet($metaSubitemColor, $entity);
$uow->persist($entity);
}
}
}
//controller - controller - controller - controller
$subitem = new Subitem();
$em = $this->getDoctrine()->getManager();
$subitem->setNombre("jls");
$subitemColor = new SubitemColor();
$subitem->addSubitemColor($subitemColor);
$em->persist($subitem);
$em->persist($subitemColor);
$metaSubitem = $em->getClassMetadata(get_class($subitem));
$em->flush();
Use recomputeSingleEntityChangeSet
方法而不是computeChangeSet
computeChangeSet
该方法应该仅由原则调用,并且为标记为刷新操作持久性的每个实体调用一次。
当您从数据库加载实体时,学说会将其数据保存到originalEntityData
数组,然后检查实体是否不存在原始数据,则该实体是新的,学说将其当前数据保存为原始数据,并使用每个字段值填充更改集。
第二次致电时computeChangeSet
学说具有新创建实体的原始数据,并且仅计算自上次调用以来更改的字段的更改集computeChangeSet
method.
这就是为什么你永远不应该打电话computeChangeSet
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)