Получение одного значения из DB :: select в Laravel 7.x

Dec 01 2020

Я использую 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

Ответы

2 TimBiegeleisen Dec 01 2020 at 12:29

Вы можете просто попробовать использовать встроенную MAXфункцию Laravel :

$max_sort = DB::table('man_pos') ->where('manual_id', $manual_id)
    ->max('sort');
NurbekBoymurodov Dec 01 2020 at 12:47

вам нужен один столбец для одного максимального возвращаемого одного значения

$max_sort = DB::table('man_pos')->select('sort')->where('manual_id', '=', $manual_id)->max('sort');