Я перевожу свои скрипты с помощью Eloquent вместо SQL в моей компании.
Я хочу сделать этот простой запрос с Eloquent, но я не знаю, как это сделать.
SQL QUERY:
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 |
+--------------------------+
Я просто хотел бы знать, возможно ли сделать простой SELECT(MAX)
с Eloquent
без использования selectRaw()
С illuminate/database v5.4
это невозможно без использования методов raw()
таких как:
selectRaw()
,whereRaw()
,DB::raw()
С illuminate/database v5.7
вы можете выполнять leftJoin()
в 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.
MyModel::query()->where('people', '>', 0)->groupBy('id')->max('date');
Вы ищете "агрегаты"
selectRaw()
.