SELECT (MAX) SQL для Eloquent без необработанных

0

Я перевожу свои скрипты с помощью 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()

Теги:
eloquent
select

2 ответа

0
Лучший ответ

С 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.

0

MyModel::query()->where('people', '>', 0)->groupBy('id')->max('date');

Вы ищете "агрегаты"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню