我有三张桌子:
内容关系
'Categories' => array(self::MANY_MANY, 'Category', 'ContentCategory(id_content, id_category)'),
'category' => array(self::HAS_MANY, 'Category', 'id'),
我需要获取具有某些特定类别的内容的所有记录(在CAistDataProvider中用于CListView)。
当我使用findAll()时,我得到了我想要的记录(它可以工作),
$model=Content::model()->with(array(
'Categorieses'=>array(
'condition'=>'id_category=1',
),
))->findAll();
但是当我使用CActiveDataProvider时,我获得了Content中的所有记录(不是具有特定类别的记录 - 不起作用)
$dataProvider=new CActiveDataProvider('Content',
array(
'pagination'=>array('pageSize'=>15),
'criteria'=>array(
'with'=>array(
'Categories'=>array(
'condition'=>'id_category=1',
),
),
),
)
);
我该怎么做?
非常感谢!
答案 0 :(得分:13)
当表与MANY_MANY或HAS_MANY相关时,Yii有时可以将单个查询分成两个SQL语句。我相信这是为了提高效率,但它可能会像你试图做的那样搞乱,因为Categories查询发生在与Contact查询不同的SQL语句中。
解决方案是使用名为CDbCriteria
的{{1}}鲜为人知的属性。如果将其设置为true,则会强制查询从同一SQL语句中的两个表中进行选择。你的条件将有效。
如果您总是希望这样,请将其添加到关系:
together
如果您只想在上述Categories' => array(self::MANY_MANY, 'Category', 'ContentCategory(id_content, id_category)','together'=>true),
案例中使用它,请将其添加到以下参数中:
$dataProvider
答案 1 :(得分:-1)