Laravel DB查询WHERE日期大于不使用JOIN



背景

我已经编写了一个SQL查询,它非常适合我的需求,我正试图将它添加到Laravel中的队列作业中。我不想使用Eloquent模型,而是想使用DB Query来确保更好的性能,因为最终会有很多联接和条件。我在检查日期时遇到了where子句的问题,但在SQL中运行时它可以很好地工作。我已经去掉了这个查询的其他部分,只包括调试这个问题所必需的内容。

代码

原始SQL:

SELECT `messages`.`created_at`, `participants`.`last_read`
FROM `messages` 
LEFT JOIN `participants` ON `messages`.`thread_id` = `participants`.`thread_id` AND `messages`.`user_id` != `participants`.`user_id` 
WHERE `messages`.`created_at` > `participants`.`last_read`;

当我直接在SQL中运行它时,我会看到2个结果,这是我当前数据所期望的。

created_atlast_read
2021-03-26 19:02:532021-03-23 19:31:30
2021-03-26 19:02:582021-03-23 19:31:30

查询生成器的where函数将始终假设右侧是一个值,并将其作为文本(在本例中为字符串(在准备好的语句中使用。如果要比较列,则需要使用whereColumn:

$query = DB::table('messages')
->leftJoin('participants', function ($join) {
$join->on('messages.thread_id', '=', 'participants.thread_id')
->on('messages.user_id', '!=', 'participants.user_id');
})
->select('messages.created_at as message_date', 'participants.last_read as last_read')
->whereColumn('messages.created_at', '>', 'participants.last_read')->get();

其他where子句可在文档中找到

最新更新