YII CActiveDataProvider avec des tables relationnelles
J'ai trois tables:
- Contenu (id)
- ContentCategory (id_content, id_category)
- Catégorie (id)
Relations de Contenu,
'Categories' => array(self::MANY_MANY, 'Category', 'ContentCategory(id_content, id_category)'),
'category' => array(self::HAS_MANY, 'Category', 'id'),
J'ai besoin de récupérer tous les enregistrements de Contenu qui ont une certaine Catégorie spécifique (dans un CActiveDataProvider à utiliser dans CListView).
Lorsque j'utilise le findAll(), j'obtiens les dossiers que je veux (ça fonctionne),
$model=Content::model()->with(array(
'Categorieses'=>array(
'condition'=>'id_category=1',
),
))->findAll();
Mais quand je le fais avec CActiveDataProvider je obtenir tous les enregistrements dans le Contenu (et non pas ceux qui ont de la Catégorie spécifique - Pas de travaux)
$dataProvider=new CActiveDataProvider('Content',
array(
'pagination'=>array('pageSize'=>15),
'criteria'=>array(
'with'=>array(
'Categories'=>array(
'condition'=>'id_category=1',
),
),
),
)
);
Comment puis-je le faire?
Merci beaucoup!
OriginalL'auteur Calete | 2011-12-06
Vous devez vous connecter pour publier un commentaire.
Lorsque les tables sont liées MANY_MANY ou HAS_MANY, Yii peut parfois briser d'une seule requête dans les deux instructions SQL. Je crois que c'est pour l'efficacité, mais il peut gâcher quelque chose comme vous tentez de le faire, puisque les Catégories de requêtes qui se passe dans une instruction SQL que le Contact de la requête.
La solution est d'utiliser une moindre connus des biens de
CDbCriteria
appelétogether
. Si vous définissez ce paramètre à true, elle force la requête pour sélectionner à partir des deux tables dans la même instruction SQL. L'état sera alors efficace.Si vous voulez que cela se produise, l'ajouter à la relation:
Si vous voulez juste pour l'
$dataProvider
cas ci-dessus, ajouter les paramètres comme ceci:OriginalL'auteur Greg Satir
De Requêtes relationnelles à travers
OriginalL'auteur Asgaroth