CakePHP 3.x: de l'enregistrement de plusieurs dossiers
J'ai lu La Conversion De Plusieurs Dossiers. Maintenant je suis en train d'enregistrer plusieurs photos à la fois à partir d'un formulaire.
Avec:
debug($this->request->data);
J'ai ceci:
[
(int) 1 => [
'filename' => '25483_106728809362869_5795827_n.jpg',
'description' => '',
'album_id' => '2'
],
(int) 3 => [
'filename' => '44569_193398817463220_816845208_n.jpg',
'description' => '',
'album_id' => '1'
]
]
Il semble ok.
Cuire a créé pour moi cette méthode d'action:
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'));
}
Mais la CakeBook n'explique pas bien comment procéder. Je sens que je dois utiliser newEntities()
et patchEntities()
, mais je ne comprends pas très bien comment le faire.
Par exemple: pourquoi la newEntity()
méthode peut accepter NULL, tandis que la méthode newEntities()
nécessairement veut un argument??
Le save()
méthode n'accepte qu'une seule entité à la fois? Donc, je dois le cycle d'économie pour chaque entité?
Puis-je avoir un petit exemple? Merci.
Vous devez vous connecter pour publier un commentaire.
En supposant que vos données dans le format correct, il devrait être aussi simple que cela:
newEntity()
peut accepter une valeur null, car l'appel de newEntity l'absence de données crée un vide entité que vous pouvez ajouter des données, dans le cas où vous ne voulez pas passer en demande de données. Par exemple:newEntities()
, cependant, attend de données multiples ou au moins un tableau de données, si vous voulez faire de nombreuses entités.newEntities()
, je peux le faire seulement une fois que le formulaire a été envoyé (comme vous dites). Normalement, cependant, à faire Cuire lenewEntity()
crée un vide entité qui est passé au modèle et est utilisé pour créer le formulaire (dans ce cas:$this->Form->create($photo)
). Comment faire dans ce cas?save()
méthode peut enregistrer plusieurs entités à la fois. En fait, de faire quelques essais, j'obtiens cette erreur:Error: Call to a member function errors() on array File [...]/vendor/cakephp/cakephp/src/ORM/Table.php Line: 1302
newEntity()
, qui sera utilisé par la forme; 2) lorsque le formulaire a été envoyé, recréer l'entité à l'aide denewEntities()
et en passant$this->request->data
; 3) à vélo chaque entitésave()
À l'aide de saveMany:
Dans certaines occasions, il serait encore mieux, à l'aide de saveMany qui n'ont pas besoin de boucle foreach plus.