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

Laravel关联表查询:如何筛选发货日期加国内配送时间为今日的订单

解决方案

你需要通过JOIN关联三张表来实现跨表字段的计算过滤,以下是可直接使用的代码(适配MySQL数据库):

use Carbon\Carbon;

// 取今日日期字符串,格式和send_date字段保持一致
$today = Carbon::today()->toDateString();

$orders = Order::where('orders.warehouse_id', $warehouseId)
    // 关联仓库表
    ->join('warehouses', 'orders.warehouse_id', '=', 'warehouses.id')
    // 关联配送配置表
    ->join('warehouse_deliveries', 'warehouses.id', '=', 'warehouse_deliveries.warehouse_id')
    // 计算发货日期加国内配送时间等于今日的条件
    ->whereRaw("DATE(DATE_ADD(orders.send_date, INTERVAL warehouse_deliveries.domestic_delivery_time DAY)) = ?", [$today])
    // 保留原有预加载
    ->with(['product', 'warehouse.warehouseDelivery'])
    // 只查订单表字段,避免JOIN的其他表同名字段覆盖订单数据
    ->select('orders.*')
    ->get();

补充说明

  • 如果仓库可能没有对应的配送配置记录,把join替换为leftJoin,同时追加->whereNotNull('warehouse_deliveries.id')过滤无配送配置的记录
  • 如果使用PostgreSQL数据库,将whereRaw的语句替换为:
    ->whereRaw("DATE(orders.send_date + (warehouse_deliveries.domestic_delivery_time || ' day')::interval) = ?", [$today])
    
  • 外层加DATE()包裹是为了兼容send_date为datetime类型的场景,避免时分秒部分影响日期匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 20:15:02