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?

Kousha
źródło
1
Chcesz uzyskać jeden wiersz z wyszukanego wyniku? A może chcesz tylko jeden wiersz z zapytania bazy danych?

Odpowiedzi:

208

Po prostu użyj tego:

$user = User::whereEmail($email)->first();
Ganesh Jogam
źródło
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 = ?' , ['[email protected]']);

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

Mam nadzieję że to pomoże.

Koushik Das
źródło
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();
Haritsinh Gohil
źródło
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

Hussam Adil
źródło
0

Spróbuj z tym

$color = \App\Color::take(1)->first();
Mahedi Hasan Durjoy
źródło
-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();
antelove
źródło
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();
Gagandeep
źródło
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