Symfony 1.0.22 对象保存失败 - 为啥?如何调试这个?

Posted

技术标签:

【中文标题】Symfony 1.0.22 对象保存失败 - 为啥?如何调试这个?【英文标题】:Symfony 1.0.22 object save fails - why? How to debug this?Symfony 1.0.22 对象保存失败 - 为什么?如何调试这个? 【发布时间】:2013-06-03 08:52:44 【问题描述】:
  public function executeProductAllAccept()
  
      $this->observation = ObservationPeer::retrieveByPK($this->getRequestParameter('id'));

      $this->forwardUnless((
            $this->observation
        ), 'observation', 'error');

      $this->redirectUnless((
            $this->product
        ), 'observation/error?flag=insufficientrights');    

      $currentTime = date('Y-m-d H:i:s');
      //echo $currentTime.'<br />';

      $this->observation->setIsSentBackToPM(0);
      //echo 'after setIsSentBackToPM'.'<br />';
      $this->observation->setIsPartAccepted(0);
      //echo 'after setIsPartAccepted'.'<br />';
      $this->observation->setIsHold(1);
      //echo 'after setIsHold'.'<br />';
      $this->observation->setCostAllAcceptanceTime($currentTime);
      //echo 'after setCostAllAcceptanceTime'.'<br />';
      $this->observation->save();
      //echo 'after save'.'<br />';
      //exit;
      return $this->redirect('observation/myObservations');
  

此代码返回一个空白页。在开发环境中尝试过-> 再次空白页。

所以我添加了一些回声来测试它到底在哪里失败了。输出是:

2013-06-03 10:40:20
after setIsSentBackToPM
after setIsPartAccepted
after setIsHold
after setCostAllAcceptanceTime

所以这在执行 save() 时显然会失败。

查看 symfony 日志:

没有错误 仅关于 SELECT 查询的 [信息] 没有关于 SET 查询的 [info](因此在 symfony 尝试执行查询之前 save() 中的某些内容失败了)

查看了 apache 错误日志 -> 没有错误。

所以我尝试重建保存方法 -> symfony propel-build-model。但问题依然存在。我将 BaseObservation 的保存方法与其他模型的保存方法进行了比较 -> 我没有发现任何异常。

我不知道如何追踪它。有什么想法吗?

编辑:更新测试:

  public function executeProductAllAccept()
  
      $this->observation = ObservationPeer::retrieveByPK($this->getRequestParameter('id'));

      echo 'before test plain save'.'<br />';
      $this->observation->save();
      echo 'after test plain save'.'<br />';

      $this->forwardUnless((
            $this->observation
        ), 'observation', 'error');

      $this->redirectUnless((
            $this->product
        ), 'observation/error?flag=insufficientrights');    

      $currentTime = date('Y-m-d H:i:s');
      echo $currentTime.'<br />';

      $this->observation->setIsSentBackToPM(0);
      echo 'after setIsSentBackToPM'.'<br />';
      $this->observation->setIsPartAccepted(0);
      echo 'after setIsPartAccepted'.'<br />';
      $this->observation->setIsHold(1);
      echo 'after setIsHold'.'<br />';
      $this->observation->setCostAllAcceptanceTime($currentTime);
      echo 'after setCostAllAcceptanceTime'.'<br />';
      $this->observation->save();
      echo 'after save'.'<br />';
      exit;
      return $this->redirect('observation/myObservations');
  

返回:

before test plain save
after test plain save
2013-06-03 10:40:20
after setIsSentBackToPM
after setIsPartAccepted
after setIsHold
after setCostAllAcceptanceTime

【问题讨论】:

您是否尝试仅保存对象而不进行编辑?就像在retrieveByPK之后一样? 这很奇怪。我按照您的建议添加了一些代码进行测试,似乎 save() 没有编辑工作。请参阅编辑后的帖子。现在我不知道我们会做错什么。 我们能看到你的 schema.xml/yml 吗?不定义setCostAllAcceptanceTime可以尝试保存吗? 谢谢你,我没有浪费时间看 save() 方法:P ty 【参考方案1】:

好的,添加

error_reporting(E_ALL);
ini_set('display_errors',TRUE);

帮助解决问题。

在我的情况下,错误是:

Fatal error: Call to undefined method Observation::setCostAllAcceptanceTime() in /xxxxxxxxxxxxxx/modules/observation/actions/actions.class.php on line 792

似乎在更新的 3 行之间的某个地方丢失了架构。当我生成新模型时,未生成方法 setCostAllAcceptanceTime(和其他 2 个)并导致错误。

【讨论】:

以上是关于Symfony 1.0.22 对象保存失败 - 为啥?如何调试这个?的主要内容,如果未能解决你的问题,请参考以下文章

在 Symfony 中正确保存相关实体(外键)

Symfony 2 - 无法使用集合保存表单

Symfony2/Doctrine:如何使用 OneToMany 将实体重新保存为级联新行

Symfony2 将实体对象序列化为会话

尝试在映射服务器上将 XLSM 保存为 CSV 时出现“对象 _workbook 的方法保存失败”错误

Symfony,如何显示对象的正常名称而不是实体编号