php - 将 SQL 查询更改为 Eloquent 查询

标签 php mysql laravel eloquent

我想把这个 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/

相关文章:

类属性中的 PHP 函数调用

php - php中isset()和empty()的区别

laravel - 如何在 laravel 4 应用程序中模拟任何用户

php - 如何在本地机器上使用 nginx 和 php7-fpm 增加 docker 的加载时间

php - MySQL 从两个表的 parentid 获取标题

php - file_get_contents ("php://input") 或 $HTTP_RAW_POST_DATA,哪一个更适合获取 JSON 请求的正文?

javascript - 在 Bootstrap 模式中实现无限滚动?

MySQL 存储过程错误

mysql - 如何使选择查询适合空条件而不是空条件

javascript - Laravel 实现动态侧边栏过滤器