Yii在many_many关系中搜索一个值,并从此关系中获取所有数据

时间:2013-07-27 09:48:30

标签: php yii relation

我有三个表productcategoryproduct_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如何说?

抱歉英语不好

2 个答案:

答案 0 :(得分:1)

首先,我认为是两个不同名称的相同关系:一个用于搜索,另一个用于显示 因为,在设定条件的时候,按类别过滤,不能得到所有的类别。 但是你还有一个关系,当你是打印帖子时,你可以在延迟加载中获得所有类别。

答案 1 :(得分:1)

我找到了答案

如果我使用$criteria->with = array('categories'=>array('select' => false)) and call $data->categories,它会进行延迟加载,一切都很好。