CakePHP - 如何更新多个记录

时间:2011-05-04 14:34:35

标签: 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->request->params['project_id'],
    ),
    'order' => array ('Item.order ASC')
));

foreach($items as $key => $item) {
    $item->saveField('Item.order', rand(1, 10));
}

但它引发了一个错误

  

致命错误:在非对象

上调用成员函数saveField()

我做错了什么?

3 个答案:

答案 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