gpt4 book ai didi

php - SELECT(MAX) SQL 到 Eloquent,无需原始数据

转载 作者:行者123 更新时间:2023-11-29 16:21:30 25 4
gpt4 key购买 nike

我在公司中使用 Eloquent 而不是 SQL 迁移脚本。

我想用 Eloquent 做这个简单的查询,但我不知道该怎么做。

SQL 查询:

SELECT MAX(date), id
FROM myTable
WHERE people > 0
GROUP BY id

+--------------------------+
| date | ID |
+--------------------------+
| 2012-08-04 | 79 |
| 2013-04-13 | 56 |
| 2013-04-13 | 55 |
+--------------------------+

经过多次查找,Eloquent建议的方法是:

    MyModel::orderBy('date', 'desc')->groupBy('id')->where('people', '>', 0);

但结果并不相同(这很正常......):

+--------------------------+
| date | ID |
+--------------------------+
| 2012-06-25 | 79 |
| 2012-06-25 | 56 |
| 2012-06-25 | 55 |
+--------------------------+

我只是想知道是否可以使用 Eloquent 执行简单的 SELECT(MAX),而不使用 selectRaw()

最佳答案

使用Illuminate/database v5.4,如果不使用raw()方法,则不可能:

  • selectRaw(),
  • whereRaw(),
  • ...
  • 或使用门面DB::raw()

使用Illuminate/database v5.7,您可以在leftJoin()中执行子查询,例如:

$latestPosts = DB::table('posts')
->select('user_id', DB::raw('MAX(created_at) as last_post_created_at'))
->where('is_published', true)
->groupBy('user_id');

$users = DB::table('users')
->joinSub($latestPosts, 'latest_posts', function ($join) {
$join->on('users.id', '=', 'latest_posts.user_id');
})->get();

参见:https://laravel.com/docs/5.7/queries

就我而言,我不能使用这个版本的照亮,因为从版本 5.5 开始,你必须使用 php 7。

关于php - SELECT(MAX) SQL 到 Eloquent,无需原始数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54476911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com