J'ai la sortie suivante que je dois être insérée dans la base de données: brièvement, chaque test Hasmany questions et chaque question hasmany répond avec chaque modèle associé ayant une clé étrangère Ce qui doit être réglé par gâteau (chaque question a un test_id, et chaque réponse a une question_id). P> Le problème est que lorsque je Comment puis-je enregistrer toutes les données, dans la définition automatique de la clé étrangère de chaque modèle associé? P> < p> merci! p> p> $ ceci-> Test-> SaveAll ($ données) ; code>, seul le test et les questions sont sauvegardées, pas les réponses. p>
3 Réponses :
Je ne suis pas sûr, mais je pense qu'il est impossible d'enregistrer une relation de troisième niveau. p>
de CakePHP: P>
Sauvegarde des données connexes avec SaveAll () ne travaillera que pour directement associé Modèles. P> blockQuote>
Vous devrez récupérer des données de troisième niveau et les sauver d'eux. P>
SaveAll () fera 1) des lignes multiples du même modèle 2) un modèle principal et toutes ses relations directes. La 3ème rangée devra être faite manuellement.
Oh ... ce n'est pas la réponse que j'espérais. Alors, je vais devoir le faire manuellement. Je pensais que c'était une approche plus caky d'enregistrer un nombre n de niveaux de relation modèle. Merci!
J'ai trois modèles A, B et C
A hasMany B B hasMany C p>
$ A-> saveAll () modélisera sauver A & B mais pas C p>
Voici une utilisation playaround I: p>
dans le modèle B remplacer afterSave comme ceci p>
function afterSave($created) { if ($created) { // check if we are in save not update $this->data['B']['id'] = $this->id; $this->data['C'] = $this->data['B']['C']; $this->saveAll($this->data); } }
Merci, ressemble à une bonne solution, mais depuis CakePHP 2.1, vous pouvez enregistrer des modèles de la profondeur que vous voulez, pas de niveau de matière ou récursivité.
Oui, vous pouvez sauver des arbres modèles profonds depuis CakePHP 2.1 cette façon
$this->SomeModel->saveAll($data, array('deep' => true));
Merci pour votre réponse. Heureux cela a été corrigé :)