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?


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

Respuestas:



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 = ?' , ['useremailaddress@email.com']);

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

Espero que esto ayude.


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();

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



-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();

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();

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.