Cakephp3如何批量保存或更新记录

时间:2018-05-06 14:31:00

标签: cakephp cakephp-3.0

使用Cake-PHP3我试图批量保存或更新(即如果记录是现有更新,否则插入)

说我有一个数组

$records=
[
['id'=1,'data'='data'],
['id'=2,'data'='data'],
['id'=3,'data'='data']
];

如何批量保存或更新它?

我尝试使用saveMany,但如果记录存在,它总是会导致重复键错误。

$entities = $this->MyModel->newEntities($records);
$this->saveMany ($entities);

我知道有一个解决方案使用epilog和mysql"重复更新"

foreach ($records AS $record) {
  $query = $this->Articles->query();
  $query
    ->insert($record_fields)
    ->values($record)
    ->epilog('ON DUPLICATE KEY UPDATE field=field+1')
    ->execute();
}

但是这个解决方案似乎可以自己保存每条记录,而不是以对我来说非常重要的大量方式保存(大量记录)

1 个答案:

答案 0 :(得分:0)

Cake \ ORM \ Table :: saveMany($ entities,$ options = [])

使用此功能,您可以在cakephp3中保存多个实体。

$data = [];  // Your data
$entities = $this->MyTable->newEntities($data);
$result   = $this->MyTable->saveMany($entities);