CakePHP 3.x: 保存多条记录
CakePHP 3.x: saving multiple records
我读过 Converting Multiple Records。现在我正在尝试从一个表单中一次保存多张照片。
与:
debug($this->request->data);
我有这个:
[
(int) 1 => [
'filename' => '25483_106728809362869_5795827_n.jpg',
'description' => '',
'album_id' => '2'
],
(int) 3 => [
'filename' => '44569_193398817463220_816845208_n.jpg',
'description' => '',
'album_id' => '1'
]
]
好像还行
Bake 为我创建了这个操作方法:
public function add() {
$photo = $this->Photos->newEntity();
if($this->request->is('post')) {
$photo = $this->Photos->patchEntity($photo, $this->request->data);
if($this->Photos->save($photo)) {
return $this->redirect(['action' => 'index']);
}
}
$this->set(compact('photo'));
}
但是 CakeBook 没有很好地解释如何进行。我觉得我必须使用 newEntities()
和 patchEntities()
,但我不太明白该怎么做。
例如:为什么newEntity()
方法可以接受NULL,而newEntities()
方法一定要参数??
save()
方法一次只接受一个实体?所以,我必须为每个实体循环保存?
能举个小例子吗?谢谢。
假设您的数据格式正确,它应该像这样简单:
$photos = $this->Photos->newEntities($this->request->data());
foreach ($photos as $photo) {
$this->Photos->save($photo);
}
newEntity()
可以接受空值,因为在没有数据的情况下调用 newEntity 会创建一个空白实体,您可以向其中添加数据,以防您不想传入请求数据。例如:
$photo = $this->Photos->newEntity();
$photo->description = 'Cool!';
$photo->filename = 'example.jpg';
$this->Photos->save($photo);
newEntities()
,但是,如果要创建多个实体,则需要多个数据或至少一个数据数组。
使用 saveMany:
在某些情况下,使用不再需要 foreach 循环的 saveMany 会更好。
$entities = $this->Photos->newEntities($this->request->data());
if($this->Photos->saveMany($entities)) {
// saved
} else {
// error
}
我读过 Converting Multiple Records。现在我正在尝试从一个表单中一次保存多张照片。
与:
debug($this->request->data);
我有这个:
[
(int) 1 => [
'filename' => '25483_106728809362869_5795827_n.jpg',
'description' => '',
'album_id' => '2'
],
(int) 3 => [
'filename' => '44569_193398817463220_816845208_n.jpg',
'description' => '',
'album_id' => '1'
]
]
好像还行
Bake 为我创建了这个操作方法:
public function add() {
$photo = $this->Photos->newEntity();
if($this->request->is('post')) {
$photo = $this->Photos->patchEntity($photo, $this->request->data);
if($this->Photos->save($photo)) {
return $this->redirect(['action' => 'index']);
}
}
$this->set(compact('photo'));
}
但是 CakeBook 没有很好地解释如何进行。我觉得我必须使用 newEntities()
和 patchEntities()
,但我不太明白该怎么做。
例如:为什么newEntity()
方法可以接受NULL,而newEntities()
方法一定要参数??
save()
方法一次只接受一个实体?所以,我必须为每个实体循环保存?
能举个小例子吗?谢谢。
假设您的数据格式正确,它应该像这样简单:
$photos = $this->Photos->newEntities($this->request->data());
foreach ($photos as $photo) {
$this->Photos->save($photo);
}
newEntity()
可以接受空值,因为在没有数据的情况下调用 newEntity 会创建一个空白实体,您可以向其中添加数据,以防您不想传入请求数据。例如:
$photo = $this->Photos->newEntity();
$photo->description = 'Cool!';
$photo->filename = 'example.jpg';
$this->Photos->save($photo);
newEntities()
,但是,如果要创建多个实体,则需要多个数据或至少一个数据数组。
使用 saveMany:
在某些情况下,使用不再需要 foreach 循环的 saveMany 会更好。
$entities = $this->Photos->newEntities($this->request->data());
if($this->Photos->saveMany($entities)) {
// saved
} else {
// error
}