Как использовать агрегатные функции на время столбца datetime с Eloquent? - PullRequest
1 голос
/ 25 октября 2019

У меня есть следующая таблица SQL:

|---------------------------------------------|
| LESSONS                                     |
|-----------------------|---------------------|
| BEGIN_DATE (DateTime) | END_DATE (DateTime) |
|-----------------------|---------------------|
|  2019-04-22 10:00:00  | 2019-04-22 12:00:00 |
|  2019-04-23 09:00:00  | 2019-04-23 10:00:00 |

Используя Laravel Eloquent, я хочу получить минимальный час всех уроков для столбца BEGIN_DATE и максимальный час из столбца END_DATE,В этом случае я хотел бы иметь 09:00:00 для минимального часа и 12:00:00 для максимального часа.

Сначала я попытался Lesson::min('begin_date') и Lesson::max('end_date'), но он, очевидно, вернул минимальное и максимальноеDateTime, а не Time.

Я также пытался

Lesson::select('select cast(begin_datetime as time)')
    ->where('season_id', $this->id)->min(time);

, но получаю ошибку SQL:

'COLUMN NOT FOUND` для псевдонима времени.

Кроме того, я бы предпочел решение только с Eloquent без SQL.

Как я могу это сделать?

1 Ответ

1 голос
/ 25 октября 2019

Вы можете сделать это:

$data = Lesson::selectRaw(
            'min(TIME(begin_date)) as min_time, max(TIME(end_date)) as max_time'
        )
        ->first()
        ->toArray();

Это должно вернуть что-то вроде этого:

dd($data);
=> [
     "min_time" => "09:00:00",
     "max_time" => "12:00:00",
   ]

Я также хотел бы увидетьКрасноречивый подход к этому (пробовал, но не удалось, смеется). Надеюсь, это поможет.

...