1

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

这是我的请求->数据

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

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

4

3 回答 3

4

我想你忘记了保存方法中的蛋糕约定,你必须把所有的字段值放在一个名为 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();
}

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

于 2012-11-14T19:36:47.217 回答
1

来自 CakePHP

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

于 2012-11-14T16:26:19.810 回答
0

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

于 2012-11-19T16:28:52.293 回答