【问题标题】:Simple CakePHP ActiveRecord save problem: Why does the field save `NULL` instead of the value I assign it?简单的 CakePHP ActiveRecord 保存问题:为什么字段保存的是 `NULL` 而不是我分配的值?
【发布时间】:2011-02-16 16:30:41
【问题描述】:

首先,我已经使用 CakePHP 很长时间了,我对 API 非常满意。我很确定这将是一个face-palm错误,但我需要重新审视这个问题,因为我已经被困了一个多小时了。

我有三个模型,UserJobCompany

  1. Company hasMany User
  2. CompanyhasMany Job

有时,当用户更新作业记录时,用户需要更改作业的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 .

有趣的是,在上述 sn-p 之后,我保存了 Job 记录,它确实使用正确的 company_id 更新(使用相同的 $this->data 数组)。

似乎只是$this->Job->User->save()NULL 值传递给表。

结果是一个新的初级开发人员在应用程序流程的另一点上对代码进行了修改。这个开发者试图完成同一张票,并且错误地执行了一个加载了NULL数据的保存方法(作业数据保存之后,这就是为什么我没有注意到,因为我正在工作之前工作保存...)。

无论如何,走下 SQL 转储让我发现了错误,所以应该感谢 @dhofstet 为我指出正确的调试路径。感谢上帝的版本控制。

【问题讨论】:

  • 你检查生成的SQL语句了吗?
  • @dhofstet 不!不管什么原因,我都是个白痴!我现在检查一下。

标签: php cakephp activerecord null saving-data


【解决方案1】:

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

【讨论】:

  • “我已经使用典型的调试技术进行了验证,例如 var_dump() [...] $this->data['Job']['company_id'] 包含从表单帮助程序提交的正确值。”
  • 另一个问题呢?您是否尝试过 saveField 而不是设置和保存?
  • 哦,不好意思,没看到第二个问题。是的,我尝试过多种保存方式。我尝试手动设置模型 ID ($this->Job->User->id = 1) 并使用savefield('company_id', $this->data['Job']['company_id'])。我得到了同样的结果。
  • 这很奇怪。您是否尝试使用您选择的值来测试它以丢弃传递参数作为问题?例如:$this->Job->User->read(NULL, 1); $this->Job->User->set('company_id', 18); $this->Job->User->save();
  • 我之前没有注意到它,但我有一个疑问。你为什么使用“$this->Job->User->read”而不是“$this->User->read”?显然 Job 和 User 模型之间没有关系。
【解决方案2】:

为什么这么复杂?

一个简单的

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

会成功

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多