首先,我已经使用 CakePHP 很长时间了,我对 API 非常满意。我很确定这将是一个手掌错误,但我需要一些新的眼光,因为我已经被困了一个多小时。
我有三个模型,User
,Job
和Company
。
Company
有很多User
Company
有很多Job
有时,当用户更新作业记录时,用户需要更改作业的company_id
字段。发生这种情况时,我也有要求更改用户自己的company_id
字段。因此,实际上, theUser
和 theJob
都将被重新分配给不同的公司。
在 CRUD 的更新方法中JobsController
,我添加了这个逻辑:
$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
。
有趣的是,在上面的代码片段之后,我保存了Job
记录,它确实得到了正确的更新company_id
(使用相同的$this->data
数组)。
只是$this->Job->User->save()
似乎将NULL
值传递给表。
<facepalm type="lame">
结果是一个新的初级开发人员在应用程序流程的另一个点上对代码进行了修改。这个开发人员试图完成同一张票,并错误地执行了一个加载NULL
数据的保存方法(在作业数据保存之后,这就是为什么我没有注意到,因为我在作业保存之前工作......)。
无论如何,走下 SQL 转储让我发现了错误,所以应该感谢 @dhofstet 为我指出正确的调试路径。感谢上帝的版本控制。
</facepalm>