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 对象保存失败 - 为啥?如何调试这个?的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2/Doctrine:如何使用 OneToMany 将实体重新保存为级联新行