【问题标题】:cakephp $this->Model->save() not updatingcakephp $this->Model->save() 没有更新
【发布时间】:2023-03-15 23:19:01
【问题描述】:

我正在尝试构建一个数组并循环更新一些字段。

这是我的请求->数据

Array

(
    [list] => Array
        (
            [4] => null
            [2] => null
            [3] => null
            [5] => 3
        )

)

它是一个 jquery 序列化列表的返回值。键是行 id,值是行 parent_id。

所以我在控制器中循环遍历数组:

foreach ($this->request->data['list'] as $key => $value) {
    (!isset($orders[$value])) ? $orders[$value]=0 : $orders[$value]++;
    $data = array('id' => $key, 'parent_id' => (int)$value, 'display_order' => $orders[$value]);
    $this->Category->save($data);
}

我在循环中创建的 $data 数组是正确的,但 sql 日志只显示每行的 SELECT COUNT(*) 等,没有 UPDATE 命令。

我尝试了各种方法来保存它:使用 set() 方法,使用 $this->Category->id = $key;而不是直接在数据数组中添加键。

任何想法为什么这不保存?我敢肯定这很简单......

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    我想你忘记了 save 方法中的蛋糕约定,你也必须将所有字段值放在一个名为 FirstCap 的数组中,如下所示:

    Array
    (
        [ModelName] => Array
            (
                [fieldname1] => 'value'
                [fieldname2] => 'value'
            )
    )
    

    否则,您可以为每个值使用 set,而且您忘记为每个插入创建一行,因此请尝试以下操作:

    foreach ($this->request->data['list'] as $key => $value) {
         (!isset($orders[$value])) ? $orders[$value]=0 : $orders[$value]++;
         $data = array( 'Category' => array('id' => $key, 'parent_id' => (int)$value, 'display_order' => $orders[$value]));
         $this->Category->save($data);
    }
    

    您还可以设置每个 id,然后遍历值

    foreach ($this->request->data['list'] as $key => $value) {
         (!isset($orders[$value])) ? $orders[$value]=0 : $orders[$value]++;
        $this->Category->id = $key;
        $this->Category->set(array('parent_id' => (int)$value,
                                   'display_order' => $orders[$value]
        ));
    
         $this->Category->save();
    }
    

    尝试每一个答案,但我认为最后一个更适合你的问题。

    【讨论】:

    • 在发布问题之前我已经尝试了所有这些建议,但最后你的最后一个建议奏效了。虽然当我尝试它时,我没有在 $value 之前使用 (int),但当出现空值时,非 NULL 的 db 列没有保存。
    【解决方案2】:

    来自 CakePHP book

    在循环中调用 save 时,不要忘记调用 create()。

    【讨论】:

      【解决方案3】:

      echo $data 并与 save() 方法的语法匹配。也不要滑到匹配表中字段的数据类型。

      【讨论】:

        猜你喜欢
        • 2011-11-11
        • 1970-01-01
        • 1970-01-01
        • 2011-03-17
        • 1970-01-01
        • 2014-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多