Cakephp 3.x:保存多个记录



我已经阅读了转换多个记录。现在,我正在尝试一次从表格中保存多张照片。

with:

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'
    ]
]

似乎还可以。

烘焙为我创建了这种动作方法:

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'));
    }

但是蛋糕手册不能很好地解释如何进行。我觉得我必须使用newEntities()patchEntities(),但我不太了解该怎么做。

例如:为什么newEntity()方法可以接受NULL,而方法newEntities()一定需要参数?save()方法一次仅接受一个实体?所以,我必须为每个实体循环节省吗?

我可以有一个小例子吗?谢谢。

假设您的数据以正确的格式,它应该与此一样简单:

$photos = $this->Photos->newEntities($this->request->data());
foreach ($photos as $photo) {
    $this->Photos->save($photo);
}

newEntity()可以接受零,因为没有数据的呼叫新颖性会创建一个空白实体,如果您不想传递请求数据,则可以将数据添加到该实体。例如:

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

newEntities()但是,如果您想制作许多实体,请期望多个数据或至少一个数据。

使用Savemany:

在某些情况下,使用不再需要循环的Savemany会更好。

    $entities = $this->Photos->newEntities($this->request->data());
    if($this->Photos->saveMany($entities)) {
        // saved
    } else { 
        // error
    }

最新更新