Laravel Eloquent - Holen Sie sich eine Reihe


88

Dies mag eine einfache Frage sein, aber ich kann das nicht herausfinden. Ich versuche, einen Benutzer per E-Mail zu erreichen, indem ich:

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

Dies gibt jedoch ein Array (der Dimension 1) von $ Benutzern zurück. Also, wenn ich den Namen bekommen will, muss ich tun $user[0]['first_name'].

Ich habe versucht, limit(1)oder take(1)oder sogar zu verwenden, ->toArray()aber es gab keinen Unterschied.

Was mache ich falsch?


1
Sie möchten eine Zeile aus dem abgefragten Ergebnis erhalten? Oder möchten Sie nur eine Zeile aus der Datenbankabfrage?

Antworten:


208

Verwenden Sie einfach dies:

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

21

Sie können dies auch tun

Bevor Sie dies verwenden, müssen Sie die DB-Fassade in der Steuerung deklarieren. Setzen Sie einfach diese Zeile dafür

use Illuminate\Support\Facades\DB;

Jetzt können Sie eine Zeile damit erhalten

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

oder auch dadurch

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

Dieser gibt ein Array mit nur einem Element zurück und während der erste ein Objekt zurückgibt. Vergiss das nicht.

Hoffe das hilft.


7

Mit Laravel Eloquent können Sie eine Zeile mit der first()Methode erhalten,

Es gibt die erste Zeile der Tabelle zurück, wenn die where()Bedingung nicht gefunden wird. Andernfalls wird die erste übereinstimmende Zeile der angegebenen Kriterien angegeben.

Syntax:

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

Beispiel:

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

0

Laravel 5.8

Wenn Sie nicht einmal eine ganze Zeile benötigen, können Sie mit der value()Methode einen einzelnen Wert aus einem Datensatz extrahieren . Diese Methode gibt den Wert der Spalte direkt zurück:

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

Dokumente überprüfen



-4

Laravel 5.2

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

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

oder

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

Dadurch werden alle Benutzer aus Ihrer Datenbank in den Speicher des Webanwendungsservers geladen und können möglicherweise abstürzen, wenn Sie mehr Benutzerdaten haben, als Sie im RAM Ihres Servers speichern können. Sie benötigen nur einen Benutzer, sodass Sie keinen Speicherplatz für alle Benutzer verschwenden müssen. Weisen Sie die Datenbank an, Ihnen nur den ersten Benutzer zu senden, $user = User::whereEmail($email)->first();wie in der akzeptierten Antwort vorgeschlagen.
Mladen Danic

-13

Sie können dies auch verwenden

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

2
Dies gibt eine Sammlung zurück, nicht ein Element.
Danon

es wird die Daten nicht die gesamten betroffenen Daten zurückgeben, nicht nur die eine Zeile \
Nadeem

4
Bitte beachten Sie, dass die Antwort derzeit korrekt ist (sie wird bearbeitet). Der Grund für die Ablehnung ist die vorherige Antwort (vor der Bearbeitung)
J. Doe
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.