J'essaye de construire un système d'invitation avec CakePHP. J'ai le modèle d'Invitation qui a beaucoup de gens, et la personne a One et appartient à l'invitation. Je crois que les relations fonctionnent, puisque ma vue d'index d'invitations peut accéder correctement et afficher ses personnes associées à travers le modèle d'invitation. Mais voici ce que les règles de relations ressemblent:Enregistrement de plusieurs modèles dans CakePHP avec saveAll()
class Invitation extends AppModel {
var $name = 'Invitation';
var $hasMany = array(
'People' => array(
'className' => 'Person',
'foreignKey' => 'invitation_id',
'dependent'=> true
)
);
...
}
class Person extends AppModel {
var $name = 'Person';
var $hasOne = 'Invitation';
var $belongsTo = 'Invitation';
...
}
MIS À JOUR MODÈLE: RELATIONS
class Invitation extends AppModel {
var $name = 'Invitation';
var $hasMany = array('Person');
...
}
class Person extends AppModel {
var $name = 'Person';
var $belongsTo = array('Invitation');
...
}
Dans ma fonction d'invitation ajouter, cependant, je ne parviens pas à enregistrer les données de nouvelles personnes. Je veux ajouter simultanément une invitation et deux personnes.
Heres ma fonction ajouter:
function add() {
$this->autoRender = false;
if($this->RequestHandler->isAjax()) {
$this->layout = 'ajax';
if(!empty($this->data)) {
$this->Invitation->create();
if($this->Invitation->saveAll($this->data)) {
//debug($this->data);
$this->Session->setFlash('Saved');
$this->redirect('invitations/add_invitations');
} else {
echo('Didnt save<br />');
}
}
}
}
Voici la sortie de mon debug ($ this-> data):
Array
(
[Invitation] => Array
(
[code] => 001
[password] => 85c8a3735499bf91d25e5960ab4ed9deeb0b457e
[type] => 1
[num_people] => 2
)
[Person] => Array
(
[0] => Array
(
[fname] => Jane
[lname] => Doe
)
[1] => Array
(
[fname] => John
[lname] => Doe
)
)
)
Je ne reçois pas d'erreurs. Les données d'invitation sont enregistrées correctement, mais les personnes ne le sont pas. MISE À JOUR: J'ai finalement réussi à travailler avec les relations de modèles mises à jour ci-dessus. Évidemment les règles hasOne & belongsTo dans le modèle Person étaient en conflit. Après que j'ai fait une erreur (un embarrassant) qui empêchait d'enregistrer lié le modèle de personne liée:
Dans le modèle d'Invitation, j'ai hade $ hasMany = array ('People'); quand il aurait dû être $ hasMany = array ('Person').
J'ai également dû modifier la configuration de ma base de données pour utiliser InnoDB par défaut, ce qui était certainement une solution nécessaire.
Je suppose que vos personnes ne réussissent pas les tests de validation. Avez-vous une table 'people'? – bancer
Essayez 'debug ($ this-> Invitation-> invalidFields())' après l'opération de sauvegarde. – deceze
J'ai bien sûr une table "people", avec un champ invitation_id. Le débogage comme ci-dessus produit un tableau vide, donc je suppose que cela signifie que les données ont été validées. –