2009-08-05 6 views
2

J'ai deux modèles et une table de jointure, User, Post et posts_users. Le tableau posts_users contient quelques champs supplémentaires, dont l'un est is_active. Je souhaite que tous les messages d'un utilisateur soient actifs, à condition que l'utilisateur soit actif.UpdateAll et HABTM dans CakePHP

Je donne les résultats suivants

$this->Post->PostsUser->updateAll(array('PostsUser.is_active' => 1), array('PostsUser.user_id' => $data['User']['id'], 'User.is_active' => 1)); 

Ce qui provoque une erreur MySQL

Warning (512): SQL Error: 1054: Unknown column 'User.is_active' in 'where clause' ...

Query: UPDATE posts_sites AS PostsUser SET PostsUser . is_active = 1 WHERE PostsUser . user_id = 1 AND User . is_active = 1

Comme vous pouvez le voir le tableau de l'utilisateur ne se joint à la requête. Y at-il loin autour de ce problème?

Répondre

2

Avez-vous défini le modèle PostsUser de manière explicite, ou seulement avec le modèle implicitement généré automatiquement?

Il semble que ce soit le cas, donc ce modèle n'aura probablement aucune association. Vous pouvez les lier à la volée avant d'effectuer l'appel de mise à jour, ou vous pouvez explicitement créer le fichier modèle et définir les associations.

I.e. Les modèles Post et User sont connectés les uns aux autres, mais le modèle PostsUser est juste un modèle d'assistance vide qui se balance sur l'un ou l'autre. Il n'a pas de connexions par lui-même, donc lorsqu'il fait un appel de PostsUser il n'a aucune association définie.

Post <---> User 
    |    | 
    v    v 
PostsUser  PostsUser 
+0

C'était un modèle généré automatiquement, j'ai créé le fichier modèle avec les associations appropriées et maintenant ça marche, Beau travail! – DanCake

Questions connexes