#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();