CakePHP-如何更新多个记录
如何在CakePHP中更新包含多条记录的单个字段 我使用CakePHP-如何更新多个记录,php,cakephp,Php,Cakephp,如何在CakePHP中更新包含多条记录的单个字段 我使用$this->Item->find('all')检索多个记录,我需要为每个记录设置不同的值并保存。我知道 $items = $this->Item->find('all', array( 'fields' => array('Item.id', 'Item.order'), 'conditions'=> array( 'Item.project_id =' => $this-&g
$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()
我做错了什么?你做错了的是,
$item
不是对象(也不是items
顺便说一句),所以你不能在此调用任何方法$items
只是一个数组,其中包含find()
操作的所有结果
您需要做的是使用saveAll()
方法,并在适当的对象上使用它,在这种情况下,$this->Item
有关更多信息,请参阅本页的底部
更新:请注意,这是一个针对CakePHP 1.3的旧答案。有关现代方法,请参阅
试试这个
foreach($items as $key => $item) {
$this->Item->id = $item['Item']['id'];
$this->Item->saveField('order', rand(1, 10));
}
我想说,你应该用它来提高性能 例:
有关性能,请参阅。随着CakePHP 2.0中的介绍,请参阅@hugofcampos的答案,以获得更好的方法。@HamidNazari我认为如果没有数千个字段,这将不好。我们如何在CakePHP 3中使用saveMany?
$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));