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
相关产品推荐
相关产品推荐

