Eloquent ORM laravel 5 Holen Sie sich ein Array von IDs

83

Ich verwende Eloquent ORM Laravel 5.1. Ich möchte ein Array von IDs zurückgeben, die größer als 0 sind. Mein Modell heißt test.

Ich habe versucht :

$test=test::select('id')->where('id' ,'>' ,0)->get()->toarray();

Es kehrt zurück:

Array ( [0] => Array ( [id] => 1 ) [1] => Array ( [id] => 2 ) )

Aber ich möchte, dass das Ergebnis in einem einfachen Array wie folgt vorliegt:

Array ( 1,2 )
paranoid
quelle

Antworten:

207

Sie könnten verwenden lists():

test::where('id' ,'>' ,0)->lists('id')->toArray();

HINWEIS: Besser, wenn Sie Ihre Modelle im Studly CaseFormat definieren, z Test.


Sie könnten auch verwenden get():

test::where('id' ,'>' ,0)->get('id');

UPDATE: (Für Versionen> = 5.2)

Die lists()Methode war in den neuen Versionen veraltet.>= 5.2 Jetzt können Sie pluck()stattdessen die Methode verwenden:

test::where('id' ,'>' ,0)->pluck('id')->toArray();

HINWEIS: Wenn Sie eine Zeichenfolge benötigen , z. B. in einem Blade , können Sie die Funktion ohne den Teil toArray () verwenden , z.

test::where('id' ,'>' ,0)->pluck('id');
Zakaria Acharki
quelle
3
Mit dem Zupf-Array ('id') wird das Array ('0' => 12, '1' => 14) usw. bei Verwendung in WhereIn ('id', $ array) nicht nach ID, sondern nach Array ausgewählt Schlüssel, also um 0,1 ...
Gediminas
2
toArray()sollte ein Array wie[12,14]
Zakaria Acharki
1
Oh ja, Sie haben Recht, ich habe über die Debugbar ant print_r debuggt, und beide haben Array-Werte mit Schlüsseln angezeigt, aber es gibt keine Schlüssel. Vielen Dank!
Gediminas
Wir bleiben für ein Projekt bei 4.2, daher schätze ich es, die Referenz -> Listen ('id') beizubehalten. Obwohl dies ein Array direkt erzeugte, musste es nicht -> toArray sein.
Dustin Graham
18

Ein Collectionanderer Weg, wie Sie es tun könnten, wäre:

$collection->pluck('id')->toArray()

Dies gibt ein indiziertes Array zurück, das beispielsweise von Laravel in einer whereIn()Abfrage perfekt verwendet werden kann .

George
quelle
2
Wird auch für die Dropdown-Liste verwendet.
Bira
Um die Sammlung aus dem Modell zu holen \YourModel::all(['id'])... ->pluck...(wenn Sie nur die ID-Spalte
angeben,
5

Die richtige Antwort darauf ist die Methode lists, die so einfach ist:

$test=test::select('id')->where('id' ,'>' ,0)->lists('id');

Grüße!

Radames E. Hernandez
quelle
Wie würden Sie die Liste der zugehörigen IDs in einem Array durch eine Beziehung von vielen zu vielen erhalten?
Pathros
Vielleicht können Sie eine DB-Klasse verwenden, Beispiel: DB :: table ('name_of_table') -> where ('condition') -> lists ('id');
Radames E. Hernandez
5

Sie können all()Methode anstelle von toArray()Methode verwenden (siehe mehr: Laravel-Dokumentation ):

test::where('id' ,'>' ,0)->pluck('id')->all(); //returns array

Wenn Sie eine benötigen string, können Sie ohne toArray()Anhang verwenden:

test::where('id' ,'>' ,0)->pluck('id'); //returns string
Mehmet Bütün
quelle
4

Lesen Sie mehr über die Methode lists ()

$test=test::select('id')->where('id' ,'>' ,0)->lists('id')->toArray()
Amir Bar
quelle
Wenn ich in_array_command in der Blade-Datei verwende, wird dieser Fehler angezeigt. > in_array () erwartet, dass Parameter 2 Array ist, Objekt angegeben
paranoid
Oh, jetzt verstehe ich dich, du musst bei Array () anrufen, listet () return collection
Amir Bar
0

Nur eine zusätzliche Information, wenn Sie verwenden DB:

DB::table('test')->where('id', '>', 0)->pluck('id')->toArray();

Und wenn Sie das eloquente Modell verwenden:

test::where('id', '>', 0)->lists('id')->toArray();
Mahmoud Mostafa
quelle
0

Obwohl Sie die Antwort markiert haben, ist dies ein viel einfacherer Ansatz

App\User::pluck('id')->toArray()
Aslamdoctor
quelle
-2

Sie können auch die all () -Methode verwenden, um ein Array ausgewählter Attribute abzurufen.

$test=test::select('id')->where('id' ,'>' ,0)->all();

Grüße

Narendra Ojha
quelle
1
Es funktioniert nicht. Es heißt Aufruf der undefinierten Methode Illuminate \ Database \ Query \ Builder :: all ()
Jaber Al Nahian