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?

Kousha
quelle
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();
Ganesh Jogam
quelle
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 = ?' , ['[email protected]']);

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.

Koushik Das
quelle
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();
Haritsinh Gohil
quelle
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

Hussam Adil
quelle
0

Versuchen Sie es damit

$color = \App\Color::take(1)->first();
Mahedi Hasan Durjoy
quelle
-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();
Anteliebe
quelle
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();
Gagandeep
quelle
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