我想把这个 SQL 查询变成一个 Eloquent 查询,但是我在 Eloquent 方面的经验和知识有点欠缺。我很想自己学习如何解决这个问题,但我尝试过的所有解决方案都失败了,而且我在生产环境中遇到了问题。
基本上我有一个收件箱系统,我将数据库中的所有消息分组到发件人 ID。我希望它按发送 ID 对其进行分组,并显示来自发件人的最新消息。
我已经设法让它只使用原始 SQL。
SELECT * FROM `messages` WHERE id IN(
SELECT MAX(id)
FROM `messages`
WHERE `recieveid` = 1
GROUP BY `sendid`
) ORDER BY `created_at` DESC
但是我不确定如何使用模型将它变成 Eloquent 陈述。我目前正在使用像这样简单的东西,但它不会按时间排序,所以它可能会错过一些消息。
$getMessages = \App\Message::where("recieveid", Auth::user()->id)-
>orderBy("id","desc")->groupBy("sendid")->get(10);
最佳答案
希望对您有所帮助!
// SELECT * FROM `messages` WHERE id IN ...
$sql = Message::whereIn('id', function ($query) {
// SELECT MAX(id)
return $query->select(DB::raw('max(id)'))
// FROM `messages`
->from(with(new Message)->getTable())
// WHERE `recieveid` = 1
->where('recieveid', 1)
// GROUP BY `sendid`
->groupBy('sendid');
})
// ORDER BY `created_at` DESC
->orderBy('created_at', 'desc');
关于php - 将 SQL 查询更改为 Eloquent 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50891530/