CakePHP 2.1 trouver à l'aide de contenir à la condition
J'ai les modèles suivants.
- De l'industrie(id, nom)
- Film(id, nom, industry_id) [Industrie a de nombreux films]
- Remorque(id, nom, movie_id) [Film a beaucoup de remorques]
J'ai besoin de trouver 6 dernières remorques pour chaque Industry
. Chaque film n'a pas besoin d'avoir une remorque ou peut avoir plusieurs[0-n].
Les résultats doivent contenir tableau de films avec atleast une remorque.
$this->Industry->find('all', array(
'contain' => array(
'Movie' => array(
'Trailer' => array(
'limit' => 1
),
'order' => 'Movie.release DESC',
'limit' => 6
)
),
'order' => 'Industry.name ASC'
));
- Pouvez-vous donner des exemples de l'Industrie des noms?
- Ce sont les industries de bois de santal', 'kollywood', 'mollywood" et "tollywood'
Vous devez vous connecter pour publier un commentaire.
Option 1 (meilleure option OMI):
Vous étiez sur la bonne voie - tout ce que vous avez besoin maintenant est le plus de l'aide de CakePHP CouterCache.
Fondamentalement, vous définissez
'counterCache' => true
dans votre$belongsTo
Association, et ajouter un champ:singularModel_count
(dans votre cas, il seraittrailer_count
champ dans lamovies
tableau). Ensuite, vous pouvez simplement l'état à l'encontre de ce domaine (voir modifié le code ci-dessous).CakePHP CounterCache conserve automatiquement la trace de combien d'éléments il a en ajoutant ou en supprimant toutes les fois que quelque chose est ajouté/supprimé via une CakePHP méthode.
Option 2:
L'autre option est d'utiliser des Jointures (voir CakePHP Fournit). Lorsque CakePHP requêtes chaque modèle appelé par "contiennent()", il ne fait requêtes distinctes, puis rejoint les données avant de les renvoyer à vous. À cause de cela, vous ne pouvez pas limiter le modèle parent sur la base des conditions contre le modèle de l'enfant, car ils sont en fait des requêtes distinctes, et MySQL de ne pas savoir à quelle table vous essayez de mentionner dans vos conditions.
L'inconvénient de l'Option 2, c'est qu'il sera difficile de faire des choses comme le renvoi de plusieurs caravanes, car vous auriez du faire une JOINTURE INTERNE (probable) entre le Film et la Remorque.