Conditions dans les modèles associés utilisant Model- & gt; find () (CakePHP)
Je vais avoir quelques problèmes avec CakePHP find() la méthode et les conditions dans "plus profond" modèle associations. Il y a certains de ces autour, mais je ne pouvais pas trouver une réponse à cette mesure.
Mon modèle associations sont User hasMany Post hasMany Comment hasMany Vote
et Vote belongsTo Comment belongsTo Post belongsTo User
respectivement. Le belongsTo
associations utiliser des jointures internes ('type' => "INTÉRIEURE").
Comment puis-je trouver tous les commentaires de votes pour les postes spécifiques d'un utilisateur avec CakePHP model->find() méthode?
J'ai utilisé une chaîne de quatre modèles délibérément, parce que cela semble fonctionner pour des conditions directement des modèles associés. Donc, il n'est pas à l'aide de la clé étrangère-la tenue de la colonne dans les pays voisins de table (à l'état Post.user_id == 1' au lieu de 'Utilisateur.id == 1').
Dans SQL ce serait:
SELECT v.*
FROM votes v
JOIN comments c ON (v.comment_id = c.id)
JOIN posts p ON (c.post_id = p.id)
JOIN users u ON (p.user_id = u.id)
WHERE u.id = 1
Je suis incapable de reproduire ces jointures à l'aide de find() + le behavior Containable comportement. Bien que je ne pouvais tout simplement obtenir un utilisateur avec toutes ses données, que je ne puis avoir à recueillir tous les suffrages de l'intérieur de la matrice résultante.
Il n'est pas de travailler comme cela (Warning: unknown column 'Utilisateur.id'):
$this->Vote->recursive = 2; //or higher
$this->Vote->find('all',array('conditions' => array('User.id' => 1)));
En fait, cela ne fonctionne pas même à l'aide de Post à la place de l'Utilisateur (Voix->Commentaire->Post) dès que j'ai ajouter la condition. La fabrication de la requête SQL ne rejoint votes et commentaires.
Le scrutin, le tableau ne doit contenir que des votes la requête SQL ci-dessus serait de retour, tout le reste doit être "reliés" loin dans le processus.
Note: Ma question est assez proche de celui-ci, qui m'a aidé à démarrer:
Dans cakephp, comment puis-je trouver les conditions sur un domaine connexe?
source d'informationauteur Wolfram | 2009-11-17
Vous devez vous connecter pour publier un commentaire.
Utiliser le behavior Containable comportement pour effectuer des conditions sur les Modèles associés. Il m'a fallu un peu de creuser cette place, mais il fonctionne comme un charme! Et il utilise de GAUCHE Rejoint donc il va encore tirer dans toutes les valeurs pour le Modèle d'origine.
Voir la documentation.
Quelque chose comme cela devrait fonctionner:
Et si vous vouliez inclure les données de l'Utilisateur de la personne qui a voté, il vous suffit d'ajouter un élément de plus à la table initiale:
Espère que ça aide!
Cela peut être un de ces moments, vous devez utiliser le méthode de requête.
Ce doit retourner un tableau de Vote des entrées comme la recherche de la méthode.
Plutôt que de faire une requête SQL personnalisée, vous pouvez explicitement joindre les tables afin de filtre par un champ de indirectement une table associée. Jetez un oeil à cette page pour voir comment se joindre à la voix et aux utilisateurs par le biais de commentaires:
http://book.cakephp.org/view/872/Joining-tables