CakePHP aAndBelogsToMany en utilisant save () vs saveAll ()
-
02-07-2019 - |
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?
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.