Получение одного значения из DB :: select в Laravel 7.x
Я использую Laravel DB::selectдля выполнения запроса, чтобы получить MAX()значение. Мне нужно только значение одного столбца из результата одной строки. Какой метод я использую, чтобы получить это из DB::select()утверждения?
Я нашел этот ответ, введите здесь описание ссылки, в которой предлагались оба pluck()и value(). Поведение pluck()изменилось с версии 5.3, так что это не был ответ. Однако когда я использовал value(), я не получил ожидаемого значения. Вместо этого я получил ошибку о массиве:
$query = DB::select('SELECT max(sort) AS sort FROM man_pos WHERE manual_id = ?', [$manual_id]);
dd($query);
Ошибка HTTP 500 Внутренняя ошибка сервера
Вызов значения функции-члена () в массиве
Конечно, я могу пройти по массиву, чтобы получить значение, но весь смысл использования метода состоит в том, чтобы избежать такой лишней глупости.
По запросу в комментариях, вот некоторые образцы данных и ожидаемый результат. Во-первых, запрос:
MariaDB [dev]> SELECT MAX(sort) FROM man_pos WHERE manual_id = 1;
+-----------+
| MAX(sort) |
+-----------+
| 3 |
+-----------+
Во-вторых, что хотелось бы получить:
$max_sort = DB::select('SELECT max(sort) AS sort FROM man_pos WHERE manual_id = ?', [$manual_id])->getSingleValue(); dd($max_sort);
^ 3
Ответы
Вы можете просто попробовать использовать встроенную MAXфункцию Laravel :
$max_sort = DB::table('man_pos') ->where('manual_id', $manual_id)
->max('sort');
вам нужен один столбец для одного максимального возвращаемого одного значения
$max_sort = DB::table('man_pos')->select('sort')->where('manual_id', '=', $manual_id)->max('sort');