首页 > 解决方案 > laravel withCount 在 laravel 中的线性嵌套关系

问题描述

我有桌子,

ec_products : 标识 | brand_id(来自 ec_brands 的 ID)| store_id(来自 mp_stores 的 ID)

ec_brands : 标识

mp_stores : 标识

我正在计算属于每个品牌和商店的总产品,使用 Laravel 的关系和 withCount,Like,

品牌型号,

public function products()
{
    return $this->hasMany(Product::class, 'brand_id')->where('is_variation', 0);
}

专卖店模式

public function products()
{
    return $this->hasMany(Product::class, 'store_id')->where('is_variation', 0);
}

在每个模型中,

$data = $data->withCount(‘products’);

现在我介绍了类别,一个产品属于多个类别。

所以使用单独的表格来链接类别和产品。

ec_product_category_product : id | category_id(来自类别表)| product_id(来自我们的产品表)

所以我有最后一个问题,如何加入所有人,

我想列出每个(品牌、商店、类别)并根据请求参数计算每个产品的数量。

喜欢

如果选择了任何品牌,则计算与该品牌相关的商店和类别。

如果选择了商店,则计算与该商店相关的品牌和类别。

如果选择了任何类别,则计算与该类别相关的商店和品牌。

界面结构

建议或解决方案。

谢谢

标签: phpmysqllaravelrelation

解决方案


You should always start you Eloquent query with the Object you want to manipulate, here, it's Product and THEN constraint your query,

so in your controller :

$product_count = Product::when($request->category_id, function($query) use ($request){
       $query->where('category_id', $request->category_id);
    })
[...] //do that for each of your constraints
->count();

if you want to do a search on the name of the category for example, use a whereHas :

$product_count = Product::when($request->search, function($query) use ($request){
       $query->whereHas('category', function($query) use ($request){
             $query->where('name', 'like', "%$request->search%");
       });
    })
[...] //do that for each of your constraints
->count();

推荐阅读