我正在尝试构建一个数组并在循环中更新一些字段。
这是我的请求 - >数据
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;而不是直接在数据数组中添加密钥。
为什么这不能保存?我确信这很简单...
答案 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()方法的语法匹配。也不要滑动以匹配表中字段的数据类型。