【问题标题】:Yii search by one value in many_many relation, and get all data from this relationYii 在 many_many 关系中搜索一个值,并从这个关系中获取所有数据
【发布时间】:2013-07-27 09:48:29
【问题描述】:

我有三张桌子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 怎么说?

抱歉英语不好

【问题讨论】:

    标签: php yii relation


    【解决方案1】:

    我找到了答案

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

    【讨论】:

      【解决方案2】:

      首先,我认为是用不同的名称建立两个相同的关系:一个用于搜索,另一个用于显示。
      因为,当我们设置条件时,我们按类别过滤帖子,我们无法获取所有类别。 但是你会有一个更多的关系,当你打印帖子时,你可以在延迟加载中获取所有类别。

      【讨论】:

      • 我想要每个帖子的所有类别,而不是所有类别
      • DataProvider 需要你展示产品,对吧?没有类别。 DataProvider 检索有关产品的数据,而不是所有类别的数据。显示、编码、打印有关类别的信息。
      • <?php foreach ($data->categories as $category):?> <?php echo CHtml::link(CHtml::encode($category->name),'category/'.$category->name); ?> <?php endforeach;?> 现在我想如果选择具有 same 视图文件的类别,则显示每个帖子的所有类别
      • 我订阅了你的问题,因为我也很感兴趣 =)。我们必须找到最好的方法)
      • 我找到了答案,如果我使用 $criteria->with = array('categories'=>array('select' => false)) 并调用 $data->categories,它会延迟加载
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多