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

Laravel模型预加载时使用其他模型字段作为匹配条件查询求助

Laravel关联条件筛选实现方案

分两种常见业务场景给出实现代码:

场景1:保留当前Haul查询结果,仅过滤符合条件的关联数据

即ID为1的Haul无论是否存在符合条件的关联都会返回,只是vehicles和bids关联仅返回满足vehicles.driver_id = bids.driver_id的记录,无匹配时关联字段为空。

$res = Haul::with([
    'vehicles' => function ($query) {
        $query->whereColumn('vehicles.driver_id', 'bids.driver_id');
    },
    'bids' => function ($query) {
        $query->whereColumn('bids.driver_id', 'vehicles.driver_id')
            ->with('driver');
    }
])
->join('bids', 'bids.haul_id', '=', 'hauls.id')
->join('haul_vehicle', 'haul_vehicle.haul_id', '=', 'hauls.id')
->join('vehicles', 'vehicles.id', '=', 'haul_vehicle.vehicle_id')
->select('hauls.*') // 避免关联表字段覆盖Haul本身字段
->find(1);

场景2:仅当存在符合条件的关联时才返回Haul数据

即如果ID为1的Haul没有满足vehicles.driver_id = bids.driver_id的关联记录,整体查询返回null。

$res = Haul::with([
    'vehicles' => function ($query) {
        $query->whereColumn('vehicles.driver_id', 'bids.driver_id');
    },
    'bids' => function ($query) {
        $query->whereColumn('bids.driver_id', 'vehicles.driver_id')
            ->with('driver');
    }
])
// 校验存在符合条件的关联
->whereHas('vehicles', function ($query) {
    $query->whereColumn('vehicles.driver_id', 'bids.driver_id');
})
->join('bids', 'bids.haul_id', '=', 'hauls.id')
->join('haul_vehicle', 'haul_vehicle.haul_id', '=', 'hauls.id')
->join('vehicles', 'vehicles.id', '=', 'haul_vehicle.vehicle_id')
->select('hauls.*')
->find(1);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:15:04