Laravel Eloquent - Get one Row


89

To może być proste pytanie, ale nie mogę tego rozgryźć. Próbuję uzyskać użytkownika przez e-mail za pomocą:

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

Ale to zwraca tablicę (o wymiarze 1) $ users. Więc jeśli chcę dostać to nazwisko, muszę to zrobić $user[0]['first_name'].

Próbowałem użyć limit(1)lub take(1), a nawet użyć, ->toArray()ale nie było różnicy.

Co ja robię źle?


1
Chcesz uzyskać jeden wiersz z wyszukanego wyniku? A może chcesz tylko jeden wiersz z zapytania bazy danych?

Odpowiedzi:



21

Ty też możesz to zrobić

Zanim tego użyjesz, musisz zadeklarować fasadę DB w kontrolerze Po prostu wstaw do tego tę linię

use Illuminate\Support\Facades\DB;

Teraz możesz uzyskać wiersz za pomocą tego

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

lub przez to też

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

Ten zwraca tablicę zawierającą tylko jeden element, a pierwszy zwraca obiekt. Miej to w pamięci.

Mam nadzieję że to pomoże.


7

Używając Laravel Eloquent możesz uzyskać jeden wiersz first()metodą,

zwraca pierwszy wiersz tabeli, jeśli where()warunek nie został znaleziony, w przeciwnym razie zwraca pierwszy pasujący wiersz z podanych kryteriów.

Składnia:

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

Przykład:

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

0

laravel 5.8

Jeśli nie potrzebujesz nawet całego wiersza, możesz wyodrębnić pojedynczą wartość z rekordu za pomocą tej value()metody. Ta metoda zwróci bezpośrednio wartość kolumny:

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

sprawdź dokumenty



-4

Laravel 5.2

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

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

lub

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

Spowoduje to załadowanie wszystkich użytkowników z bazy danych do pamięci serwera aplikacji sieci Web i prawdopodobnie spowoduje awarię, jeśli masz więcej danych użytkownika niż możesz przechowywać w pamięci RAM serwera. Potrzebujesz tylko jednego użytkownika, więc nie musisz marnować pamięci na nich wszystkich. Poinstruuj bazę danych, aby wysłała Ci tylko pierwszego użytkownika z $user = User::whereEmail($email)->first();propozycją w zaakceptowanej odpowiedzi.
Mladen Danic

-13

Możesz również użyć tego

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

2
To zwróci kolekcję, a nie jeden element.
Danon,

zwróci dane nie wszystkie dane nie tylko jeden wiersz \
Nadeem

4
Należy pamiętać, że odpowiedź jest obecnie poprawna (jest redagowana), powodem głosów przeciwnych jest poprzednia odpowiedź (przed edycją)
J. Doe
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.