Question

J'utilise une base de données très intrinsèque avec une application CakePHP et jusqu'à présent, mes vues et contrôleurs multi-modèles fonctionnent correctement. J'ai une table singulière ( Entity ) qui porte son id sur plusieurs autres tables en tant que clé étrangère entity_id

Certaines tables sont des relations uniques (un société correspond à une entité ) et certaines sont un à plusieurs ( entité pouvant en avoir plusieurs Adresses ) et ainsi de suite.

Je ne vais pas / je ne peux pas changer le modèle de base de données , c'est donc la structure.

J'utilise saveAll () pour enregistrer des données sur ces tables avec des noms d'entrée tels que:

Entity.type='x' (hidden inside the view)
Company.name
Address.0.street
Address.0.city
Address.1.street
Address.1.city

... and so on ...

et ma sauvegarde tout fait tout le travail, BEGIN TRANSACTION , tous les INSERT et un COMMIT final ... ...

Mais maintenant, j'ai créé une EntityCategory qui est une relation n à n et créé la relation HABTM complète dans le modèle.

Cela fonctionne quand je save () , mais uniquement la relation HABTM , et il enregistre tout ce qui se passe lorsque j'utilise saveAll () (juste comme précédemment) sauf pour la relation HABTM .

Est-ce que je manque quelque chose? Comment je fais ce travail correctement? J'utilise le code suivant aujourd'hui:

if (!empty($this->data)) {
  $this->Entity->saveAll($this->data);
  $this->Entity->save($this->data);
}

Le saveAll () enregistre toutes les données de plusieurs tables, enregistre l'identifiant dans Entity- > id et les sauvegardes save () les relations HABTM , mais je ne sais pas si elles sont correctes ou si elles peuvent me poser problème si je change de structure / modèle.

Est-ce la meilleure façon de l'utiliser? Existe-t-il un moyen correct de sauvegarder ces relations dans CakePHP? Qu'est-ce que votre expérience / connaissance peut me dire?

Était-ce utile?

La solution

Ceci est résolu si vous téléchargez le tous les soirs .

Attention cependant, quelque chose d'autre pourrait se casser.

Autres conseils

Le problème des associations saveAll () et HABTM est un numéro connu, qui a pas été résolu à partir de 1.2 RC2.

Selon les recommandations de CakePHP, livre de recettes :

  

"Lorsque vous travaillez avec des modèles associés, il est important de réaliser que la sauvegarde des données du modèle doit toujours être effectuée à l'aide du modèle CakePHP correspondant. Si vous enregistrez une nouvelle publication et ses commentaires associés, vous utiliserez les modèles de publication et de commentaire au cours de la sauvegarde. "

Cependant, utiliser saveAll () et save () devrait fonctionner, et IMHO est une solution plus flexible / générique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top