symfony2 +原则:修改onFlush上的子实体:“无效的参数编号:绑定变量的数量与令牌的数量不匹配”

zii*_*web 3 symfony doctrine-orm

我有一个1:m关系SubitemSubitemColor。现在,我想在中保存一些数据onFlush以修改的数据SubitemColor。问题:执行控制器时,我收到以下错误消息,您也可以在下面看到:

执行'INSERT INTO SubitemColor(代码,precio,pvp_recommended,file_name,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吗?)时发生异常。 ?,?,?,?,?,?,?,?,?)'和参数[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();
Run Code Online (Sandbox Code Playgroud)

Vad*_*man 5

使用recomputeSingleEntityChangeSet方法代替computeChangeSet

computeChangeSet 该方法只应被教义调用,并且对标记为刷新操作具有持久性的每个实体调用一次。

从数据库加载实体时,主义将其数据保存到originalEntityData数组中,然后检查是否不存在该实体的原始数据,然后该实体是新的,主义将其当前数据保存为原始数据,并用每个字段值填充更改集。

在第二次调用方法时,computeChangeSet具有新创建实体的原始数据,并且仅计算自上次调用computeChangeSet方法以来更改字段的更改集。

那就是为什么你永远不应该打电话computeChangeSet