CakePHP - 如何更新多个记录

Dav*_*eng 7 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));
}
Run Code Online (Sandbox Code Playgroud)

但它引起了一个错误的说法

致命错误:在非对象上调用成员函数saveField()

我究竟做错了什么?

hug*_*pos 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));
Run Code Online (Sandbox Code Playgroud)


Ham*_*ari 9

更新:请注意,这是CakePHP 1.3的旧答案.对于现代方法,请参阅下面的答案.

试试这个

foreach($items as $key => $item) {
    $this->Item->id = $item['Item']['id'];
    $this->Item->saveField('order', rand(1, 10));
}
Run Code Online (Sandbox Code Playgroud)

  • 有关性能,请参阅[@ hugofcampos的答案](http://stackoverflow.com/a/18255526/216084). (2认同)