php - 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(来自我们的产品表)
所以我有最后一个问题,如何加入所有人,
我想列出每个(品牌、商店、类别)并根据请求参数计算每个产品的数量。
喜欢
如果选择了任何品牌,则计算与该品牌相关的商店和类别。
如果选择了商店,则计算与该商店相关的品牌和类别。
如果选择了任何类别,则计算与该类别相关的商店和品牌。
建议或解决方案。
谢谢
解决方案
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();
推荐阅读
- android - 如何在相机预览中显示标记
- android - 任何库来读取 android 中的 mdict *.MDX 文件?
- single-page-application - PWA 工作箱向导在第一步后停止
- python - Seaborn barplot 不受支持的数据类型
- scala - 内存不足错误的 Spark 配置
- c - scanf和指针的误区
- java - 防止谷歌地图中当前位置的两个标记
- python - Django: NoReverseMatch 在''。“ ”不是有效的视图函数或模式名称
- php - 在 PHP 中格式化字符串的正则表达式或类似 sprintf 的函数
- c# - 在foreach中显示/隐藏div不起作用