Laravel 5.8:如何筛选出共享产品类型的商品(排除类型唯一项)
解决Laravel 5.8中筛选共享产品类型商品的问题
嘿,这问题很常见,完全不用手动写foreach循环来处理,Laravel的查询构造器和Eloquent已经帮我们准备好了高效的解决方案。核心思路是先找出那些出现次数不止一次的product_type_id,再用这些ID筛选对应的商品,下面给你两种实用的写法:
方法一:使用查询构造器(Query Builder)
这种写法直接操作数据库查询,适合不需要Eloquent模型的场景:
$sharedProducts = DB::table('products') // 子查询筛选出出现次数>1的product_type_id ->whereIn('product_type_id', function ($subQuery) { $subQuery->select('product_type_id') ->from('products') ->groupBy('product_type_id') ->havingRaw('COUNT(*) > 1'); }) ->get();
方法二:使用Eloquent模型
如果你已经定义了Product模型(对应products表),可以用更简洁的Eloquent写法:
// 假设你的模型是App\Product use App\Product; $sharedProducts = Product::whereIn('product_type_id', function ($subQuery) { $subQuery->select('product_type_id') ->from('products') ->groupBy('product_type_id') ->havingRaw('COUNT(*) > 1'); })->get();
额外说明
这两种方式都是让数据库层面完成过滤,比你手动foreach循环再筛选要高效得多——毕竟数据库在处理分组统计这类操作上天生更擅长,还能减少PHP端的内存占用。
内容的提问来源于stack exchange,提问作者cooper
相关产品推荐
相关产品推荐

