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

Laravel ORM如何按多对多关联的另一张表条件筛选记录

你可以直接用 Eloquent ORM 提供的 whereHas() 方法实现关联筛选,不需要手动写 JOIN 逻辑,后续如果要同时处理其他关联也可以直接链式调用方法,可维护性比 DB facade 写法高很多。

实现代码

假设你的 apps 表对应的模型类为 App\Models\App,且你在模型中定义的多对多关联方法名为 categories,代码如下:

use App\Models\App;

$apps = App::whereHas('categories', function ($query) use ($categories) {
    // 这里的categories.id要和你实际的分类表主键名对应
    $query->whereIn('categories.id', $categories);
})
// 如果需要同时预加载关联数据,比如你提到的另一个多对多关联,直接加with即可
->with('categories', '你的另一个多对多关联方法名')
->get();

补充说明

  • 这种写法会自动处理中间表的关联查询,和你原有 DB facade 实现的逻辑执行结果完全一致,生成的SQL没有额外性能开销。
  • 搭配 with() 预加载可以避免 N+1 查询问题,直接同时拿到apps关联的所有分类、其他关联表的数据,不用再单独写查询。
  • 如果需要筛选出同时属于所有传入分类的apps,可以给whereHas加数量约束:
    $apps = App::whereHas('categories', function ($query) use ($categories) {
        $query->whereIn('categories.id', $categories);
    }, '=', count($categories))->get();
    

内容的提问来源于stack exchange,提问作者luisfer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:09:03