0

首先,我已经使用 CakePHP 很长时间了,我对 API 非常满意。我很确定这将是一个手掌错误,但我需要一些新的眼光,因为我已经被困了一个多小时。

我有三个模型,UserJobCompany

  1. Company有很多User
  2. 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>

4

2 回答 2

1

您是否检查过 $this->data['Job']['company_id'] 不为空?也许验证存在一些问题。您是否尝试过 saveField 而不是设置和保存?

于 2011-02-16T16:37:36.043 回答
1

为什么这么复杂?

一个简单的

$this->Job->User->save($this->data);

将把戏

假设您使用 [User][company_id] 等填充数组

于 2011-02-16T20:30:31.250 回答