Laravel连接两个表,其中比较两个日期时间列

时间:2018-04-11 14:43:09

标签: laravel eloquent laravel-eloquent

我有两个表,我想使用两个日期时间列的值运行联合查询,我有product表和sync_status表,我想返回所有update_at日期时间大于synced_at日期时间的产品。

DB::table('products')
    ->join('sync_statuses', function ($join) {
        $join->on('products.product_number', '=', 'sync_statuses.product_number')
            ->where('products.updated_at', '>', 'sync_statuses.synced_at')
            ->whereNull('products.deleted_at');
    })
    ->select('products.product_number');

这个SQL代表了我尝试使用Eloquent实现的目标:

SELECT products.product_number
FROM products
JOIN push_statuses
ON products.product_number = statuses.product_number
AND (
  statuses.synced_at IS NULL
  OR products.updated_at > statuses.synced_at
)

2 个答案:

答案 0 :(得分:0)

您必须使用on()代替where()来比较列:

->on('products.updated_at', '>', 'sync_statuses.synced_at')

答案 1 :(得分:0)

这对我有用:

DB::table('products')
        ->join('statuses', function ($join) {
            $join->on('products.product_number', '=', 'statuses.product_number')
                ->where(DB::raw('products.updated_at'), '>=', DB::raw('statuses.synced_at'))
                ->whereNull('products.deleted_at');

        })->select('products.product_number');

我需要使用DB::raw('products.updated_at')来引用where()子句中的每个日期时间列。