首页 文章

将SQL查询更改为雄辩的查询

提问于
浏览
1

我正在尝试将这个SQL查询变成一个雄辩的查询,但我在口才中的经验和知识有点缺乏 . 我很想学习如何自己解决这个问题,但我尝试过的所有解决方案都失败了,而且我在 生产环境 环境中遇到了问题 .

基本上我有一个收件箱系统,我将数据库中的所有邮件分组到发件人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

但是,我不确定如何使用模型将其变成雄辩的声明 . 我目前正在使用这样简单的东西,但它没有按时间排序,所以它可能会遗漏一些消息 .

$getMessages = \App\Message::where("recieveid", Auth::user()->id)- 
>orderBy("id","desc")->groupBy("sendid")->get(10);

1 回答

  • 1

    希望这对你有所帮助!

    // 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');
    

相关问题