cakephp $ this-> Model-> save()不更新

时间:2012-11-14 16:03:22

标签: cakephp

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

这是我的请求 - >数据

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;而不是直接在数据数组中添加密钥。

为什么这不能保存?我确信这很简单...

3 个答案:

答案 0 :(得分:4)

我想你忘记了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();
}

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

答案 1 :(得分:1)

来自CakePHP book

  

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

答案 2 :(得分:0)

回显$ data并将其与save()方法的语法匹配。也不要滑动以匹配表中字段的数据类型。