gpt4 book ai didi

php - Yii 范围 - 按相关模型过滤

转载 作者:行者123 更新时间:2023-11-29 00:20:10 25 4
gpt4 key购买 nike

我有一个 Yii 项目,包含产品、类别等。

我正在尝试按类别列表过滤产品,因此我想获取某些类别中的所有产品。

产品模型与类别模型有关系:

...
'categories' => array(self::MANY_MANY, 'ProductCategory', 'product_product_category(product_id, category_id)'),
...

我的产品模型具有以下命名范围:

public function category($categoryWid){
$category = ProductCategory::model()->findByWid($categoryWid); // wid is a custom id
$all = $category->children_ids;

$this->getDbCriteria()->mergeWith(array(
'with'=>array(
'categories'=>array(
'condition' => "categories.id IN ($all)"
)),
));
return $this;
}

当我尝试通过以下方式调用此范围时:

Product::model()->category($categoryWid)->count();

它生成以下 SQL。

SELECT 
COUNT(DISTINCT `t`.`id`)
FROM `product` `t`
LEFT OUTER JOIN `product_product_category` `categories_categories`
ON (`t`.`id`=`categories_categories`.`product_id`)
LEFT OUTER JOIN `product_category` `categories`
ON (`categories`.`id`=`categories_categories`.`category_id`)
WHERE (status = 2) AND (categories.id IN (21,23,22,24,25))

我的问题是双重 JOIN。因此,它使用 with 方法添加了第二个 JOIN。

我必须在范围内更改什么才能仅使用基于关系的 JOIN 并实现过滤?

最佳答案

目前这个标准有帮助:

$this->getDbCriteria()->mergeWith(array(
'together' => false,
'with'=>'categories',
'condition' => "categories.id IN ($all)"
));

关于php - Yii 范围 - 按相关模型过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21338968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com