как использовать МИНИМАЛЬНЫЙ и МАКСИМАЛЬНЫЙ SQL-запрос в Laravel Eloquent

#mysql #sql #laravel #laravel-5 #eloquent

#mysql #sql #laravel #laravel-5 #eloquent

Вопрос:

я хочу использовать min и max laravel elaquent в одной строке, возможно ли это?

 Appointmentsetting::where('Day','=',1)
->whereIn('PersonID', function ($query) {
    $query->select('p.id')
        ->from('users as p')
        ->join('appointmentsettings as aps', 'aps.PersonID', '=', 'p.id')
        ->where('p.active', '=', 1)
        ->where('aps.CompanyID', '=', 1)
        ->orWhereIn('aps.PersonID', function ($query2) {
            $query2->select('cps.user_id')
                    ->from('companypersonstructs as cps')
                    ->where('cps.CompanyID', '=', 1);
        })
        ->groupBy('aps.PersonID');
})
->where('active', '=', 1)
->select(DB::raw("SELECT MIN(StartFrom) AS StartFrom, MAX(EndTo) AS EndTo"));
->get();
  

я получил ошибку

SQLSTATE[42000]: синтаксическая ошибка или нарушение доступа: 1064 У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с ‘ВЫБЕРИТЕ MIN (startFrom) КАК startFrom, MAX (EndTo) КАК EndTo из `appointmentsetting’ в строке 1

Комментарии:

1. min(‘col_name’)->max(‘col_name’) ?

2. -> select(DB::raw(«MIN (startFrom) КАК startFrom, MAX (EndTo) КАК EndTo»)) Попробуйте это

3. @LimKeanPhang да, я уже пробую это, но система выдает мне ошибку Call to a member function max() on string

4. Обновленные комментарии. Попробуйте DB::raw

5. просто удалите форму выбора внутри

Ответ №1:

 ->selectRaw(" MIN(StartFrom) AS StartFrom, MAX(EndTo) AS EndTo");
  

пожалуйста, поставьте выше запрос и попробуйте. основная проблема в вашем запросе заключается в том, что вы используете select два раза, нет необходимости в записи select внутри select или selectRaw
для получения дополнительной информации о необработанном запросе нажмите здесь

Комментарии:

1. я писал информацию как в комментарии, так и в ответе, почему я не видел его комментарий и ответ уже есть

Ответ №2:

 Appointmentsetting::where('Day','=',1)
->whereIn('PersonID', function ($query) {
    $query->select('p.id')
        ->from('users as p')
        ->join('appointmentsettings as aps', 'aps.PersonID', '=', 'p.id')
        ->where('p.active', '=', 1)
        ->where('aps.CompanyID', '=', 1)
        ->orWhereIn('aps.PersonID', function ($query2) {
            $query2->select('cps.user_id')
                    ->from('companypersonstructs as cps')
                    ->where('cps.CompanyID', '=', 1);
        })
        ->groupBy('aps.PersonID');
})
->where('active', '=', 1)
->select(DB::raw("MIN(StartFrom) AS StartFrom, MAX(EndTo) AS EndTo"));
->get();