Obtendo um único valor de DB :: select no Laravel 7.x

Dec 01 2020

Estou usando o Laravel DB::selectpara executar uma consulta para obter um MAX()valor. Eu quero apenas o valor de uma única coluna do resultado de uma única linha. Que método devo usar para obter isso de uma DB::select()declaração?

Encontrei esta resposta digite a descrição do link aqui que ofereceu pluck()e value(). O comportamento de pluck()havia mudado desde 5.3, então essa não era a resposta. No entanto, quando usei value(), não obtive o valor que esperava. Em vez disso, recebi um erro sobre uma matriz:

$query = DB::select('SELECT max(sort) AS sort FROM man_pos WHERE manual_id = ?', [$manual_id]);
dd($query);

Erro HTTP 500 Erro interno do servidor

Chamada para um valor de função de membro () na matriz

Claro, posso atravessar a matriz para extrair o valor, mas o objetivo de usar um método é evitar esse rigamarole extra.


Por solicitação nos comentários, aqui estão alguns dados de amostra e o resultado esperado. Primeiro, a consulta:

MariaDB [dev]> SELECT MAX(sort) FROM man_pos WHERE manual_id = 1;
+-----------+
| MAX(sort) |
+-----------+
|         3 |
+-----------+

Em segundo lugar, o que eu gostaria de obter:

$max_sort = DB::select('SELECT max(sort) AS sort FROM man_pos WHERE manual_id = ?', [$manual_id])->getSingleValue(); dd($max_sort);

^ 3

Respostas

2 TimBiegeleisen Dec 01 2020 at 12:29

Você pode apenas tentar usar a MAXfunção interna do Laravel :

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

você deseja coluna única para valor único de retorno máximo único

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