Obtendo um único valor de DB :: select no Laravel 7.x
Estou usando o Laravel DB::select
para 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
Você pode apenas tentar usar a MAX
função interna do Laravel :
$max_sort = DB::table('man_pos') ->where('manual_id', $manual_id)
->max('sort');
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');