【发布时间】:2011-02-16 16:30:41
【问题描述】:
首先,我已经使用 CakePHP 很长时间了,我对 API 非常满意。我很确定这将是一个face-palm错误,但我需要重新审视这个问题,因为我已经被困了一个多小时了。
我有三个模型,User、Job 和 Company。
-
CompanyhasManyUser -
CompanyhasManyJob
有时,当用户更新作业记录时,用户需要更改作业的company_id 字段。发生这种情况时,我还需要更改用户自己的company_id 字段。因此,实际上,User 和 Job 都将被重新分配给不同的公司。
在JobsController的CRUD更新方法中,我添加了这样的逻辑:
$this->Job->User->read(NULL, $this->Session->read('User.id'));
$this->Job->User->set('company_id', $this->data['Job']['company_id']);
$this->Job->User->save();
我已经使用典型的调试技术进行了验证,例如var_dump() $this->Session->read('User.id') 包含正确的值,$this->data['Job']['company_id'] 包含从表单帮助程序提交的正确值。
更新了正确的User记录,因为表中的modified时间戳表明是这样,但是company_id字段设置为NULL而不是数据数组中正确的company_id .
有趣的是,在上述 sn-p 之后,我保存了 Job 记录,它确实使用正确的 company_id 更新(使用相同的 $this->data 数组)。
似乎只是$this->Job->User->save() 将NULL 值传递给表。
结果是一个新的初级开发人员在应用程序流程的另一点上对代码进行了修改。这个开发者试图完成同一张票,并且错误地执行了一个加载了NULL数据的保存方法(在作业数据保存之后,这就是为什么我没有注意到,因为我正在工作之前工作保存...)。
无论如何,走下 SQL 转储让我发现了错误,所以应该感谢 @dhofstet 为我指出正确的调试路径。感谢上帝的版本控制。
【问题讨论】:
-
你检查生成的SQL语句了吗?
-
@dhofstet 不!不管什么原因,我都是个白痴!我现在检查一下。
标签: php cakephp activerecord null saving-data