You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:05:46