CakePHP 3.x:保存多条记录

Mir*_*iai 6 cakephp cakephp-3.0

我读过转换多个记录.现在我正试图从表单中一次保存多张照片.

附:

debug($this->request->data);
Run Code Online (Sandbox Code Playgroud)

我是这样的:

[
    (int) 1 => [
        'filename' => '25483_106728809362869_5795827_n.jpg',
        'description' => '',
        'album_id' => '2'
    ],
    (int) 3 => [
        'filename' => '44569_193398817463220_816845208_n.jpg',
        'description' => '',
        'album_id' => '1'
    ]
]
Run Code Online (Sandbox Code Playgroud)

好像没问题.

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'));
    }
Run Code Online (Sandbox Code Playgroud)

但CakeBook并没有很好地解释如何继续.我感觉我必须使用newEntities()patchEntities(),但我不太明白怎么做.

例如:为什么newEntity()方法可以接受NULL,而方法newEntities()必然要一个参数?该save()方法一次只接受一个实体?那么,我必须为每个实体循环保存?

我可以举一个小例子吗?谢谢.

Isa*_*kew 8

假设您的数据格式正确,它应该像这样简单:

$photos = $this->Photos->newEntities($this->request->data());

foreach ($photos as $photo) {
    $this->Photos->save($photo);
}
Run Code Online (Sandbox Code Playgroud)

newEntity()可以接受null,因为在没有数据的情况下调用newEntity会创建一个可以添加数据的空白实体,以防您不想传入请求数据.例如:

$photo = $this->Photos->newEntity();
$photo->description = 'Cool!';
$photo->filename = 'example.jpg';

$this->Photos->save($photo);
Run Code Online (Sandbox Code Playgroud)

newEntities()但是,如果要创建许多实体,则需要多个数据或至少一个数据数组.