J'ai des problèmes avec la méthode et les conditions de CakePHP de CakePHP dans les associations de modèles "plus profondes". Il y en a quelques-uns d'entre eux, mais je ne pouvais pas trouver une réponse à cela jusqu'à présent.
Mes associations de modèles sont Comment puis-je trouver tous les votes de commentaires pour les messages d'un utilisateur spécifique avec le modèle de CakePHP -> trouver () Méthode? P> J'ai utilisé délibérément une chaîne de quatre modèles, car cela semble fonctionner pour des conditions dans des modèles directement associés. Donc il n'y a pas d'utilisation de la colonne de maintien de la clé étrangère dans la table voisine (condition 'post.user_id == 1' au lieu de 'user.id == 1'). P> dans SQL Ce serait : P> User Hasmany Post Hasmany Commentaire Covery vote CODE> et
VOTEZSTO COMMENTAIRER BEOPOTO POST code> respectivement. Les associations code> d'appartenance utilisent des jointures intérieures ('Type' => 'intérieure'). P>
$this->Vote->recursive = 2; // or higher
$this->Vote->find('all',array('conditions' => array('User.id' => 1)));
4 Réponses :
Ceci peut être l'un de ces moments où vous devez utiliser le Méthode de requête .
Les appels SQL que vous ne pouvez ou ne veulent pas faire via d'autres méthodes de modèle (prudent - il existe très peu de circonstances que cela est vrai) peut être faite en utilisant la méthode de la requête () du modèle. P> blockQuote>
xxx pré> Ceci devrait renvoyer une gamme d'entrées de vote comme la méthode de recherche. P>
foreach ($votes as $vote): echo $vote['Vote']['id']; endforeach;
Merci, je suis au courant de la fonction Query () et de ce qu'il est utilisé mais je voulais vraiment savoir comment "marcher sur le modèle" en utilisant la recherche () pour injecter une condition ailleurs.
Plutôt que de faire une requête SQL personnalisée, vous pouvez explicitement rejoindre les tables afin de filtrer par un champ d'une table indirectement associée. Regardez cette page pour voir comment rejoindre les votes et les utilisateurs via des commentaires: http://book.cakephp.org/view/872/joining-tables p>
$joins = array( array('table'=>'comments', 'alias' => 'Comment', 'type'=>'inner', 'conditions'=> array( 'Comment.id = Vote.comment_id' )), array('table'=>'posts', 'alias' => 'Post', 'type'=>'inner', 'conditions'=> array( 'Post.id = Comment.post_id' )), array('table'=>'users', 'alias' => 'User', 'type'=>'inner', 'conditions'=> array( 'User.id = Post.user_id','User.id'=>$user_id )) ); $votes = $this->Vote->find('all',array('joins'=>$joins,'recursive'=>-1));
Super upvote ... Merci Mate .. J'avais tellement de difficulté avec ces jointures, la référence de ce code m'a aidé ...
Utilisez le comportement contenable pour effectuer des conditions sur les modèles associés. Il m'a fallu un peu pour creuser ça, mais ça marche comme un charme! Et il utilise des jointures de gauche afin qu'il retirera toujours toutes les valeurs du modèle d'origine.
Quelque chose comme ça devrait fonctionner: p> et si vous vouliez inclure les données utilisateur de la personne qui a voté Vous pouvez simplement ajouter un élément de plus à la matrice initiale: p> espère que cela aide! p> p>
Je reçois un résultat différent lorsque vous essayez cette technique: la condition ne s'applique qu'à «l'utilisateur». Si la condition n'est pas remplie, seul "l'utilisateur" est annulé pendant que tous les votes sont retournés. En vérité, dans mon code, j'ai des relations HABTM, de sorte que je ne puisse même pas ajouter «utilisateur» au tableau d'origine, car le gâteau se plaint que le vote n'est pas associé à l'utilisateur. En tout cas, pour moi, la maladie semble s'appliquer uniquement à la feuille, pas l'arbre entier lorsque je voulais tout l'arbre.
J'espère que votre réponse m'apportera dans mon propre problème. Après 10 minutes, j'essaie dans mon contexte, ça marche, génial! N'oubliez pas que Mettez Public $ Actsas = Array ('contentable'); Code> Intérieur
Appmodel Code> Classe.
Y a-t-il une raison pour laquelle vous évitez de multiples appartitions?
Vous voulez dire avoir une colonne de clé étrangère user_id dans la table des vote et associé directement à l'utilisateur et à voter? Cela semble un peu redondant et crée des relations circulaires dans mon schéma. "Cela dit" ça marcherait, je suppose. Ou suis-je mal compris ce que vous entendez par plusieurs appartenances? Si tel est le cas, est-il possible / nécessaire d'ajouter explicitement une association pour vote d'un utilisateur d'appartenance et de la configurer pour le commentaire "passer"?
Ajout d'une clé étrangère à chaque table qu'elle est associée à une autre table serait trop redondante.