Laravel Eloquent - Obtenha uma linha


88

Pode ser uma pergunta simples, mas não consigo entender. Estou tentando obter um usuário por e-mail usando:

$user = User::whereEmail($email)->get();

Mas isso está retornando um array (de dimensão 1) de $ users. Então, se eu quiser saber o nome, tenho que fazer $user[0]['first_name'].

Tentei usar limit(1)ou take(1), ou mesmo usar, ->toArray()mas não houve diferença.

O que estou fazendo errado?


1
Você deseja obter uma linha do resultado consultado? Ou você quer apenas uma linha da consulta ao banco de dados?

Respostas:



21

Você também pode fazer isso

Antes de usar isso, você deve declarar a fachada do banco de dados no controlador. Basta colocar esta linha para isso

use Illuminate\Support\Facades\DB;

Agora você pode obter uma linha usando este

$getUserByEmail = DB::table('users')->where('email', $email)->first();

ou por isso também

$getUserByEmail = DB::select('SELECT * FROM users WHERE email = ?' , ['useremailaddress@email.com']);

Este retorna um array com apenas um item e enquanto o primeiro retorna um objeto. Tenha isso em mente.

Espero que isto ajude.


7

Usando o Laravel Eloquent você pode obter uma linha usando o first()método,

ele retorna a primeira linha da tabela se a where()condição não for encontrada, caso contrário, ele fornece a primeira linha correspondente de determinados critérios.

Sintaxe:

Model::where('fieldname',$value)->first();

Exemplo:

$user = User::where('email',$email)->first(); 
//OR
//$user = User::whereEmail($email)->first();

0

laravel 5.8

Se você nem precisa de uma linha inteira, pode extrair um único valor de um registro usando o value()método. Este método retornará o valor da coluna diretamente:

$first_name = DB::table('users')->where('email' ,'me@mail,com')->value('first_name');

verificar documentos



-4

Laravel 5.2

$sql = "SELECT * FROM users WHERE email = $email";

$user = collect(\User::select($sql))->first();

ou

$user = User::table('users')->where('email', $email)->pluck();

Isso carregará todos os usuários de seu banco de dados na memória do servidor de aplicativos da web e, possivelmente, fará com que ele trave se você tiver mais dados de usuário do que pode armazenar na RAM do servidor. Você só precisa de um usuário, portanto, não há necessidade de desperdiçar memória com todos eles. Instrua o banco de dados a enviar a você o primeiro usuário apenas com $user = User::whereEmail($email)->first();o proposto na resposta aceita.
Mladen Danic

-13

Você também pode usar este

$user = User::whereEmail($email)->first();

2
Isso retornará uma coleção, não um elemento.
Danon

ele retornará os dados não todos os dados afetados, não apenas uma linha \
Nadeem

4
Observe que a resposta está correta no momento (foi editada), o motivo dos votos negativos é a resposta anterior (antes da edição)
J. Doe
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.