简单的CakePHP ActiveRecord保存问题:为什么字段保存`NULL`而不是我指定的值?

时间:2011-02-16 16:30:41

标签: php cakephp activerecord null saving-data

首先,我已经使用CakePHP很长一段时间了,我对API很满意。我很确定这会是一个 face-palm 错误,但我需要一些新的眼睛,因为我已经被困了一个多小时。

我有三个模型,UserJobCompany

  1. Company hasMany User
  2. Company hasMany Job
  3. 有时,当用户更新作业记录时,用户需要更改作业的company_id字段。发生这种情况时,我还需要更改用户自己的company_id字段。因此,实际上,UserJob都将重新分配给其他公司。

    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一些信任,指出我正确的调试路径。谢谢版本控制。

    < /捂脸>

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

为什么这么复杂?

一个简单的

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

将成功

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