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

Laravel关联查询:如何用主表Drivers的动态ID过滤关联数据?

解决方案

当然可以实现,你只需要把原来依赖外部$driver_id的条件,改成用whereColumn关联当前查询的Drivers表id字段即可,不需要预先传入外部变量。

调整后的查询代码如下:

$drivers = Drivers::where('somecondition', $request->condition)
    ->with([
        'license' => function($query) {
            $query->where('is_active', 1);
        },
        'license.licenseReport' => function($query) {
            // 关联当前Driver的id和licenseReport的driver_id
            $query->whereColumn('license_report.driver_id', 'drivers.id')
                ->where('is_active', 1)
                ->orderBy('created_at', 'DESC');
        },    
    ])
    ->get();

说明

  • whereColumn方法用于比较两个数据库字段的值是否相等,这里就是让license_report表的driver_id等于当前查询的drivers表的id字段。
  • 注意要确保表名(license_report、drivers)和你的实际数据库表名一致,如果遵循Laravel的表名约定,模型复数形式即为表名,比如Drivers模型对应drivers表,LicenseReport对应license_reports,若你的表名不同,替换为实际名称即可。

如果你的licenseReport关联本身已正确定义与Driver的关系,也可以考虑在关联定义中默认添加该约束,但如果仅需在本次查询中过滤,上述写法更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 08:37:32