Eloquent ORM laravel 5 Uzyskaj tablicę identyfikatorów

87

Używam Eloquent ORM laravel 5.1, chcę zwrócić tablicę identyfikatorów większych niż 0, mój model o nazwie test .

Próbowałem :

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

Wraca:

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

Ale chcę, aby wynik był w prostej tablicy, takiej jak:

Array ( 1,2 )
paranoidalny
źródło

Odpowiedzi:

213

Możesz użyć lists():

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

UWAGA: Lepiej, jeśli zdefiniujesz swoje modele w Studly Caseformacie, np Test.


Możesz również użyć get():

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

AKTUALIZACJA: (dla wersji> = 5.2)

lists()Metoda została zaniechana w nowych wersjach >= 5.2, obecnie można użyć pluck()metody zamiast:

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

UWAGA: Jeśli potrzebujesz łańcucha , na przykład w ostrzu , możesz użyć funkcji bez części toArray () , na przykład:

test::where('id' ,'>' ,0)->pluck('id');
Zakaria Acharki
źródło
3
with pluck ('id') tablica to tablica ('0' => 12, '1' => 14) itd., gdy jest używana w WhereIn ('id', $ tablica), wybiera nie według id, ale według tablicy klucz, więc 0,1 ...
Gediminas
2
toArray()powinien zwrócić tablicę taką jak[12,14]
Zakaria Acharki
1
o tak, masz rację, debugowałem przez Debugbar ant print_r i oba pokazywały wartości tablicowe z kluczami, ale nie ma kluczy. Dziękuję Ci!
Gediminas
Utknęliśmy na 4.2 dla jednego projektu, więc doceniam zachowanie odniesienia -> list ('id'). Chociaż to wygenerowało tablicę bezpośrednio, nie musiało -> toArray it.
Dustin Graham
18

Z Collectioninnego sposobu możesz to zrobić:

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

Zwróci to tablicę indeksowaną, doskonale nadającą się do wykorzystania whereIn()na przykład przez laravel w zapytaniu.

Jerzy
źródło
2
Używany również do listy rozwijanej.
Bira
Aby pobrać kolekcję z modelu \YourModel::all(['id'])... ->pluck...(podając tylko kolumnę ID, nie
ładujesz
5

Prawidłowa odpowiedź to metoda lists, jest bardzo prosta:

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

Pozdrowienia!

Radames E. Hernandez
źródło
Jak uzyskać listę powiązanych identyfikatorów w tablicy przez relację wiele do wielu?
Pathros
Może możesz użyć klasy DB, przykład: DB :: table ('nazwa_tabeli') -> gdzie ('warunek') -> listy ('id');
Radames E. Hernandez
5

Możesz użyć all()metody zamiast toArray()metody (zobacz więcej: dokumentacja laravel ):

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

Jeśli potrzebujesz string, możesz użyć bez toArray()załącznika:

test::where('id' ,'>' ,0)->pluck('id'); //returns string
Mehmet Bütün
źródło
4

przeczytaj o metodzie list ()

$test=test::select('id')->where('id' ,'>' ,0)->lists('id')->toArray()
Amir Bar
źródło
kiedy używam in_array_command w pliku blade, pokaż ten błąd. > in_array () oczekuje, że parametr 2 będzie tablicą, podany obiekt
paranoja,
och, teraz cię rozumiem, musisz zadzwonić doArray (), list () return collection
Amir Bar
1

Tylko dodatkowe informacje, jeśli używasz DB:

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

A jeśli używasz modelu Eloquent:

test::where('id', '>', 0)->lists('id')->toArray();
Mahmoud Mostafa
źródło
0

Chociaż zaznaczyłeś odpowiedź, jest to znacznie prostsze podejście

App\User::pluck('id')->toArray()
aslamdoctor
źródło
-2

Możesz także użyć metody all (), aby uzyskać tablicę wybranych atrybutów.

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

pozdrowienia

Narendra Ojha
źródło
1
To nie działa. Mówi Call to undefined method Illuminate \ Database \ Query \ Builder :: all ()
Jaber Al Nahian