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 )

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');

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 .


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!


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

4

Lesen Sie mehr über die Methode lists ()

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

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();

0

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

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

-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


1
Es funktioniert nicht. Es heißt Aufruf der undefinierten Methode Illuminate \ Database \ Query \ Builder :: all ()
Jaber Al Nahian
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.