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?

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

Respostas:

208

Basta usar isto:

$user = User::whereEmail($email)->first();
Ganesh Jogam
fonte
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 = ?' , ['[email protected]']);

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

Espero que isto ajude.

Koushik Das
fonte
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();
Haritsinh Gohil
fonte
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

Hussam Adil
fonte
0

Tente com isso

$color = \App\Color::take(1)->first();
Mahedi Hasan Durjoy
fonte
-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();
amor
fonte
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();
Gagandeep
fonte
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