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?
Odpowiedzi:
Po prostu użyj tego:
źródło
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.
źródło
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();
źródło
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
źródło
Spróbuj z tym
$color = \App\Color::take(1)->first();
źródło
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();
źródło
$user = User::whereEmail($email)->first();
propozycją w zaakceptowanej odpowiedzi.Możesz również użyć tego
źródło