首先,我已经使用CakePHP很长一段时间了,我对API很满意。我很确定这会是一个 face-palm 错误,但我需要一些新的眼睛,因为我已经被困了一个多小时。
我有三个模型,User
,Job
和Company
。
Company
hasMany User
Company
hasMany Job
有时,当用户更新作业记录时,用户需要更改作业的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
。
有趣的是,在上面的代码段之后,我保存了Job
记录,而 更新了正确的company_id
(使用相同的$this->data
数组)
只是$this->Job->User->save()
似乎将NULL
值传递给表格。
< facepalm type =“lame”>
在应用程序流程的另一点,结果显示了一个新的初级开发人员。这个开发人员试图完成相同的票证,并错误地执行了一个加载了NULL
数据的保存方法(在作业数据保存之后,这就是为什么我没有注意到,因为我是在作业保存之前工作......)。
无论如何,走下SQL转储让我发现了错误,所以应该给@dhofstet一些信任,指出我正确的调试路径。谢谢版本控制。
< /捂脸>
答案 0 :(得分:1)
您是否检查过$ this-> data ['Job'] ['company_id']是否为空? 也许验证存在一些问题。您是否尝试过saveField而不是设置&保存?
答案 1 :(得分:1)
为什么这么复杂?
一个简单的
$this->Job->User->save($this->data);
将成功
假设您使用[User] [company_id]等填充数组