wake-up-neo.net

Laravel: Abrufen eines einzelnen Werts aus einer MySQL-Abfrage

Ich versuche, einen einzelnen Wert aus der MySQL-Datenbank mit laravel abzurufen, aber das Problem ist, dass ich ein Array bekomme. Dies ist mein Abfrageergebnis in der MySQL-Befehlszeile:

select groupName from users;

+-----------+
| groupName |
+-----------+
| Admin     |
+-----------+

meine Laravelfunktion:

public static function PermitAddNewUser(){
    $username=Session::get('key');
    $data=DB::select("select groupName from users where username='$username';");
    return $data; 
}

der erwartete $ data-Wert ist eine Zeichenfolge mit dem Wert = Admin

aber was ich bekomme ist: [{"groupName":"Admin"}]

34
Osama Al-Banna

Bearbeiten:

Entschuldigung, ich habe über pluck () vergessen, da viele kommentiert haben: Der einfachste Weg ist:

return DB :: table ('Benutzer') -> wo ('Benutzername', $ Benutzername) -> Pluck ('Gruppenname');

Dadurch wird nur das erste Ergebnis der angeforderten Zeile direkt als String zurückgegeben.

Mit dem fließenden Query Builder erhalten Sie trotzdem ein Array. Das heißt, der Query Builder hat keine Ahnung, wie viele Zeilen aus dieser Query zurückkommen. Hier können Sie etwas sauberer machen

$ result = DB :: table ('users') -> select ('groupName') -> where ('username', $ username) -> first ();

First () teilt dem queryBuilder mit, nur eine Zeile und kein Array zurückzugeben. Sie können also Folgendes tun:

$ result-> groupName zurückgeben;

Ich hoffe es hilft

37
elfif

Noch eine weitere Bearbeitung : Ab Version 5.2 pluck ist nicht nicht mehr veraltet, es hat sich gerade ein neues Verhalten ergeben (wie zuvor lists - siehe Randbemerkung):

edit : Ab Version 5.1 pluck ist veraltet, verwenden Sie stattdessen value:

DB::table('users')->where('username', $username)->value('groupName');    

// valid for L4 / L5.0 only
DB::table('users')->where('username', $username)->pluck('groupName');

dies gibt einen einzelnen Wert des groupName-Feldes der ersten gefundenen Zeile zurück.


SIDE NOTE reg. @TomasButeler comment : Da Laravel keiner vernünftigen Versionierung folgt, gibt es manchmal Fälle wie diese. Zum Zeitpunkt der Erstellung dieser Antwort hatten wir die pluck-Methode, um den SINGLE-Wert aus der Abfrage zu erhalten (Laravel 4. * & 5.0).

Dann wurde mit L5.1 pluck veraltet und stattdessen die value-Methode zum Ersetzen verwendet.

Aber um es lustig zu machen, war pluck tatsächlich nie weg. Stattdessen hat es nur ein völlig neues Verhalten erhalten und ... veraltete lists-Methode. (L5.2) - das wurde durch die Inkonsistenz zwischen Query Builder und Collection-Methoden verursacht (in 5.1 funktionierte pluck auf der Sammlung und Abfrage anders, was der Grund ist) .

45
Jarek Tkaczyk

Ab Laravel> = 5.3 verwenden Sie am besten value :

$groupName = \App\User::where('username',$username)->value('groupName');

oder

use App\User;//at top of controller
$groupName = User::where('username',$username)->value('groupName');//inside controller function

Natürlich müssen Sie eine Modellbenutzertabelle für Benutzer erstellen, die die effizienteste Art ist, mit Datenbanktabellen in Laravel zu interagieren.

11
Learner

[EDIT] Die erwartete Ausgabe der pluck-Funktion hat sich von Laravel 5.1 auf 5.2 geändert. Warum es wird in 5.1 als veraltet markiert

In Laravel 5.1 erhält pluck den Wert einer einzelnen Spalte aus dem ersten Ergebnis einer Abfrage.

In Laravel 5.2 erhält pluck ein Array mit den Werten einer bestimmten Spalte. Es ist also nicht länger veraltet, aber es macht nicht mehr das, was es früher war.

Daher ist die Antwort schnell die value-Funktion, wenn Sie eine Spalte aus der ersten Zeile benötigen und Laravel 5.1 oder höher verwenden.

Danke an Tomas Buteler für den Hinweis in den Kommentaren.

[ORIGINAL] Für alle, die auf diese Frage stoßen und Laravel 5.1 verwenden, ist pluck () veraltet und wird in Laravel 5.2 vollständig entfernt.

Überlegen Sie, wie Sie den Code für die Zukunft prüfen, indem Sie stattdessen value() verwenden.

return DB::table('users')->where('username', $username)->value('groupName');
5

Rufen Sie mit dem Query Builder den einzelnen Spaltenwert ab, z. B. groupName .

  $groupName = DB::table('users')->where('username', $username)->pluck('groupName');

Für Laravel 5.1

 $groupName=DB::table('users')->where('username', $username)->value('groupName');

Oder rufen Sie mit dem Benutzermodell den einspaltigen Wert ab

 $groupName = User::where('username', $username)->pluck('groupName');

Oder holen Sie sich die erste Zeile und teilen Sie sie auf, um einen einzelnen Spaltenwert zu erhalten

 $data = User::where('username', $username)->first();
 if($data)
   $groupName=$data->groupName;
3
Majbah Habib

Auf Laravel 5.6 gibt es eine sehr einfache Lösung:

User::where('username', $username)->first()->groupName;

Es wird groupName als String zurückgeben.