Laravel Eloquent - Consigue una fila

89

Esta puede ser una pregunta simple, pero no puedo resolverla. Estoy tratando de obtener un usuario por correo electrónico usando:

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

Pero esto devuelve una matriz (de dimensión 1) de $ users. Entonces, si quiero obtener el nombre, tengo que hacerlo $user[0]['first_name'].

Intenté usar limit(1)o take(1), o incluso usar, ->toArray()pero no hubo diferencia.

¿Qué estoy haciendo mal?

Kousha
fuente
1
¿Quiere obtener una fila del resultado consultado? ¿O simplemente quiere una fila de la consulta de la base de datos?

Respuestas:

208

Simplemente usa esto:

$user = User::whereEmail($email)->first();
Ganesh Jogam
fuente
21

Tu tambien puedes hacer esto

Antes de usar esto, debe declarar la fachada de la base de datos en el controlador Simplemente coloque esta línea para eso

use Illuminate\Support\Facades\DB;

Ahora puedes obtener una fila usando esto

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

o por esto también

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

Este devuelve una matriz con solo un elemento y mientras que el primero devuelve un objeto. Ten eso en mente.

Espero que esto ayude.

Koushik Das
fuente
7

Usando Laravel Eloquent puedes obtener una fila usando el first()método,

devuelve la primera fila de la tabla si where()no se encuentra la condición; de lo contrario, da la primera fila coincidente de los criterios dados.

Sintaxis:

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

Ejemplo:

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

laravel 5.8

Si ni siquiera necesita una fila completa, puede extraer un solo valor de un registro usando el value()método. Este método devolverá el valor de la columna directamente:

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

consultar documentos

Hussam Adil
fuente
0

Pruébalo

$color = \App\Color::take(1)->first();
Mahedi Hasan Durjoy
fuente
-4

Laravel 5.2

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

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

o

$user = User::table('users')->where('email', $email)->pluck();
antílove
fuente
Esto cargará todos los usuarios de su base de datos en la memoria del servidor de aplicaciones web y posiblemente hará que se bloquee si tiene más datos de usuario de los que puede almacenar en la RAM de su servidor. Solo necesita un usuario, por lo que no es necesario desperdiciar memoria en todos ellos. Indique a la base de datos que le envíe el primer usuario solo $user = User::whereEmail($email)->first();como se propone en la respuesta aceptada.
Mladen Danic
-13

También puedes usar esto

$user = User::whereEmail($email)->first();
Gagandeep
fuente
2
Esto devolverá una colección, no un elemento.
Danon
devolverá los datos, no todos los datos afectados, no solo una fila \
Nadeem
4
Tenga en cuenta que la respuesta actualmente es correcta (está editada), el motivo de los votos negativos es la respuesta anterior (antes de editar)
J. Doe