Laravel Eloquent - Ottieni una riga


91

Questa potrebbe essere una domanda semplice, ma non riesco a capirlo. Sto cercando di ottenere un utente tramite e-mail utilizzando:

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

Ma questo sta restituendo un array (di dimensione 1) di $ users. Quindi se voglio avere il nome, devo farlo $user[0]['first_name'].

Ho provato a usare limit(1)o take(1), o anche a usare ->toArray()ma non c'era differenza.

Che cosa sto facendo di sbagliato?


1
Vuoi ottenere una riga dal risultato interrogato? O vuoi solo una riga dalla query del database?

Risposte:


212

Usa semplicemente questo:

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

22

Puoi farlo anche tu

Prima di usarlo, devi dichiarare la facciata DB nel controller. Metti semplicemente questa riga per questo

use Illuminate\Support\Facades\DB;

Ora puoi ottenere una riga usando questo

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

o anche da questo

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

Questo restituisce un array con un solo elemento e mentre il primo restituisce un oggetto. Tienilo a mente.

Spero che sia di aiuto.


7

Usando Laravel Eloquent puoi ottenere una riga usando il first()metodo,

restituisce la prima riga della tabella se la where()condizione non viene trovata altrimenti restituisce la prima riga corrispondente di determinati criteri.

Sintassi:

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

Esempio:

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

0

laravel 5.8

Se non hai nemmeno bisogno di un'intera riga, puoi estrarre un singolo valore da un record utilizzando il value()metodo. Questo metodo restituirà direttamente il valore della colonna:

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

controlla i documenti



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

Questo caricherà tutti gli utenti dal tuo database nella memoria del server di applicazioni web e probabilmente causerà l'arresto anomalo se hai più dati utente di quelli che puoi memorizzare nella RAM del tuo server. Hai solo bisogno di un utente, quindi non c'è bisogno di sprecare memoria su tutti loro. Indica al database di inviarti il ​​primo utente solo con $user = User::whereEmail($email)->first();quanto proposto nella risposta accettata.
Mladen Danic

-15

Puoi anche usare questo

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

2
Ciò restituirà una raccolta, non un elemento.
Danon

restituirà i dati no tutti i dati effettuati non solo una riga \
Nadeem

5
Si prega di notare che la risposta è attualmente corretta (è stata modificata), il motivo dei voti negativi è la risposta precedente (prima della modifica)
J. Doe
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.