Yii2有很多条件和多个表

沙格·哈利格利(Shaig Khaligli)

我在下面添加了我的应用程序的一些代码。它仅显示product_category名称和属于该product_category的产品数。它像一种魅力。但是我想再次获得类别名称及其仅属于特定城市的产品。例如,我想获取属于“木制”类别且位于巴库的产品数量。我认为我必须在模型的getActiveProducts()函数中进行一些更改。任何帮助表示赞赏。这些是我的表:

产品

id | name      | offer_category_id
-----------------------------
1  | Khar      |  3
2  | SantaCruz |  2
3  | Furniture |  2
4  | VT        |  1
5  | newFort   |  4

产品分类

id | name
--------------
1  | Khar        
2  | Wooden 
3  | Sion       
4  | VT   
5  | newFort

产品地址

id | city     | offer_id
-----------------------------
1  | Baku      |  1
2  | Ismailly  |  2
3  | Absheron  |  5
4  | Paris     |  4
5  | Istanbul  |  3

我的控制器:

$data['productCategory'] = ProductCategory::find()
->joinWith('products')
->all();

查看代码:

<?php foreach($data['productCategory'] as $key=>$value):             
<li>
    <span class="m-offer-count"><?= $value->productsCount; ?></span>
</li>
<?php endforeach; ?>

最后是我的ProductCategory模型:

public function getActiveProducts() {
        $all_products = $this->hasMany(Product::className(),['product_category_id' => 'id'])->select(['id'])->where(['status'=>1])->all();
        return $all_product;
}
public function getProductsCount() {
        return sizeof($this->activeProducts);
}
Oakymax
  1. 关系函数应返回ActiveQuery对象:

    /**
     * @return \yii\db\ActiveQuery  
     **/
    public function getProducts() {
        return $all_products = $this->hasMany(Product::className(), ['product_category_id' => 'id']);
    }
    

    并且不要在这样的函数(声明关系)中添加任何其他条件和语句,您将可以在ActiveQuery::link()和其他方法中使用它

  2. 您可以在其他功能中重用您的关系

    这是按城市过滤结果的选项

    /**
     * @param City|null $city filter result by city
     * @return \yii\db\ActiveQuery  
     **/
    public function getActiveProducts($city = null) {
        $query = $this->getActiveProducts()
            ->andWhere(['status' => 1]);
    
        if (!empty($city)) {
            $query->joinWith('address', false)
                ->andWhere(['address.city_id' => $city->id]);
        }
    
        return $query;
    }
    

    假设您课堂上City课堂和address关系Product

    中的第二个参数joinWith禁用急切加载,以避免对数据库进行不必要的附加查询。

  3. 您不应选择完整的相关记录集来获取其计数,而应使用ActiveQuery::count()function:

    /**
     * @param City|null $city get the count for particular city
     * @return integer
     **/
    public function getActiveProductsCount($city = null) {
        return $this->getActiveProducts($city)->count();
    }
    
  4. $city在您的视图中使用过滤器

    <?php foreach($data['productCategory'] as $category):             
    <li>
        <span class="m-offer-count">
            <?= $category->getActivePoductsCount($city); ?>
        </span>
    </li>
    <?php endforeach; ?>
    

ps我认为您不需要joinWith在控制器中进行设置(如果您不将其用于进一步的查询或急于加载),只需选择所有类别:

$data['productCategory'] = ProductCategory::find()->all();

pps,我相信这里不需要获取数组a,$key => $value因为您不使用$key

希望这可以帮助...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Yii2在join语句中有很多条件

来自分类Dev

有很多条件

来自分类Dev

SELECT *有很多条件

来自分类Dev

如何在Yii2 GridView和DetailView中显示有很多关系记录?

来自分类Dev

验证Yii2中的多个条件

来自分类Dev

Yii2 QueryBuilder遇到很多麻烦

来自分类Dev

Yii2 Select2-更新时选择的值-联结表(很多)

来自分类Dev

MongoDB-具有很多条件的OR函数

来自分类Dev

来自不同表yii2的采样条件

来自分类Dev

对yii2中的多个表使用Joins

来自分类Dev

yii2 updateallcounter 有 2 个条件

来自分类Dev

带有多条件Laravel的联接表

来自分类Dev

带有多条件Laravel的联接表

来自分类Dev

Yii2:有条件的安全验证器

来自分类Dev

Yii2与concat的条件

来自分类Dev

Yii2 RBAC权限可以有多个规则吗?

来自分类Dev

Yii2保存表格具有多个模型

来自分类Dev

使用Yii2在sqlserver中选择模式和表?

来自分类Dev

需要澄清:Yii2、MySQL 过程和临时表

来自分类Dev

在Yii2中使用别名从具有联接的多个表中选择数据库

来自分类Dev

获取与条件匹配的联接表中具有2个或更多条目的记录

来自分类Dev

使用带有多个参数的yii \ rest \ UrlRule的Yii2路由

来自分类Dev

在表单中使用多个值进入yii2框架php中的where条件

来自分类Dev

ggplot : geom_bar 有很多条

来自分类Dev

Yii2 viaTable连接条件

来自分类Dev

yii2中的where条件的倍数

来自分类Dev

Yii2向AssetBundle添加条件

来自分类Dev

Yii2条件模型

来自分类Dev

Yii2 根据条件添加规则