我有三个表product
,category
,product_category
并在产品型号中添加此关系
return array(
'categories' => array(self::MANY_MANY, 'Category',
'product_category(product_id, category_id)')
);
现在我想按类别搜索,如果选择类别。
在产品actionIndex
中添加此代码
$criteria=new CDbCriteria;
if($_GET['name'])
{
$criteria->with = array('categories');
$criteria->together = true;
$criteria->addCondition('categories.name = :name');
$criteria->params = array(':name'=>$_GET['name']);
}
$dataProvider=new CActiveDataProvider('Product',array(
'pagination'=>array(
'pageSize'=>10,
),
'criteria' => $criteria
));
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
如果我进行了搜索,则类别会在急切加载时加载,并且除了搜索之外没有其他类别
如何按类别搜索产品,但在$data->categories
中有所有类别,而不是按照第二种关系加载它们,Andrey Vorobyev如何说?
抱歉英语不好
答案 0 :(得分:1)
首先,我认为是两个不同名称的相同关系:一个用于搜索,另一个用于显示 因为,在设定条件的时候,按类别过滤,不能得到所有的类别。 但是你还有一个关系,当你是打印帖子时,你可以在延迟加载中获得所有类别。
答案 1 :(得分:1)
我找到了答案
如果我使用$criteria->with = array('categories'=>array('select' => false)) and call $data->categories
,它会进行延迟加载,一切都很好。