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 )

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

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.


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!


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

4

przeczytaj o metodzie list ()

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

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

0

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

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

-2

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

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

pozdrowienia


1
To nie działa. Mówi Call to undefined method Illuminate \ Database \ Query \ Builder :: all ()
Jaber Al Nahian
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.