我有两个表,我想使用两个日期时间列的值运行联合查询,我有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
)
答案 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()子句中的每个日期时间列。