我讀過Converting Multiple Records。現在我試圖從表單中一次保存多張照片。CakePHP 3.x:保存多個記錄
有了:
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'));
}
但CakeBook不能很好地解釋如何進行。我覺得我必須使用newEntities()
和patchEntities()
,但我不太明白該怎麼做。
例如:爲什麼newEntity()
方法可以接受NULL,而方法newEntities()
必然需要參數? save()
方法一次只接受一個實體?那麼,我必須爲每個實體循環儲蓄?
我可以舉個小例子嗎?謝謝。
謝謝@Isaac。但我注意到一件事。如果我使用'newEntities()',我只能在表單被髮送後才能做到(如你所說)。然而,通常情況下,通過烘焙'newEntity()'創建一個傳遞給模板並用於創建表單的空白實體(在這種情況下:'$ this-> Form-> create($ photo)'') 。在這種情況下怎麼辦? –
另外,我不認爲'save()'方法可以一次保存多個實體。事實上,我做了一些測試,發現這個錯誤: '錯誤:調用成員函數錯誤()array File [...]/vendor/cakephp/cakephp/src/ORM/Table.php Line: 1302' –
在我看來,解決方案是:1)用'newEntity()'創建一個空實體,它將被表單使用; 2)當表單被髮送時,使用'newEntities()'並傳遞'$ this-> request-> data'來重新創建實體; 3)將每個實體循環到'save()' –