如何在CakePHP中更新多个记录的单个字段?
我使用$this->Item->find('all')
检索多条记录,我需要为每条记录设置不同的值并保存。我做了
$items = $this->Item->find('all', array(
'fields' => array('Item.id', 'Item.order'),
'conditions'=> array(
'Item.project_id =' => $this->request->params['project_id'],
),
'order' => array ('Item.order ASC')
));
foreach($items as $key => $item) {
$item->saveField('Item.order', rand(1, 10));
}
但它引发了一个错误
致命错误:在非对象
上调用成员函数saveField()
我做错了什么?
答案 0 :(得分:18)
我会说你应该使用CakePHP Save Many来提高效果。
例如:
$data = array(
array( 'Item' => array('id' => 2, 'order' => rand(1,5)) ),
array( 'Item' => array('id' => 3, 'order' => rand(1,5)) ),
);
$Model->saveMany($data, array('deep' => true));
答案 1 :(得分:9)
更新:请注意,这是CakePHP 1.3的旧答案。有关现代方法,请参阅the answer below。
试试这个
foreach($items as $key => $item) {
$this->Item->id = $item['Item']['id'];
$this->Item->saveField('order', rand(1, 10));
}
答案 2 :(得分:2)
你做错了是$item
不是一个对象(也不是items
btw),所以你不能调用任何方法。 $items
只是一个数组,其中包含find()
操作的所有结果。
您需要做的是使用saveAll()
方法并在适当的对象上使用它,在这种情况下为$this->Item
。
有关详细信息,请参阅本页底部the documentation。