Jak uzyskać tylko jedną kolumnę jako jedną tablicę wymiarową w Laravel 5.2 przy użyciu elokwentu?
Próbowałem:
$array = Word_relation::select('word_two')->where('word_one', $word_id)->get()->toArray();
ale ta daje to jako 2-wymiarową tablicę, taką jak:
array(2) {
[0]=>
array(1) {
["word_one"]=>
int(2)
}
[1]=>
array(1) {
["word_one"]=>
int(3)
}
}
ale chcę to uzyskać jako:
array(2) {
[0]=>2
[1]=>3
}
laravel
eloquent
laravel-5.2
Riiwo
źródło
źródło
select
jest nadmiarowy, ale nie widzę problemu z uzyskaniem w rezultacie kolekcji, ponieważ kolekcja jest po prostu fantazyjną tablicą, którą można iterować tak samo jak tablicę. Rzadko używam tablic zamiast kolekcji, ponieważ ślad pamięci generalnie nie stanowi problemu, a kolekcje można łatwo rzutować na tablice w razie potrzeby, ponieważ implementujątoArray
metodę. Jednak aby zachować spójność z Twoim pytaniem, zmodyfikowałem odpowiedź, aby przekonwertować wynik.Collection
ma równieżpluck()
metodę - to, czego używasz, jest metodąQueryBuilder
.Jeśli otrzymasz wiele wpisów, właściwą metodą jest lista .
Word_relation::select('word_two')->where('word_one', $word_id)->lists('word_one')->toArray();
źródło
lists()
Działa dobrze przez to samo. Dziękuję Ci.lists()
jest przestarzały w Laravel w wersji 5.2 i nowszych, gdziepluck()
zgodnie z oznaczoną odpowiedzią jest droga.Można to zrobić w skrócie:
Model::pluck('column')
gdzie model jest modelem, takim jak
User
model i kolumna jako nazwa kolumnyid
Jeśli zrobisz
User::pluck('id') // [1,2,3, ...]
i oczywiście możesz mieć dowolne inne klauzule, takie jak
where
klauzula przed zerwaniemźródło
Natknąłem się na to pytanie i pomyślałem, że wyjaśnię, że metoda list () elokwentnego obiektu budowniczego została zdeprecjonowana w Laravel 5.2 i zastąpiona przez pluck ().
// <= Laravel 5.1 Word_relation::where('word_one', $word_id)->lists('word_one')->toArray(); // >= Laravel 5.2 Word_relation::where('word_one', $word_id)->pluck('word_one')->toArray();
Te metody można również wywołać na przykład w kolekcji
// <= Laravel 5.1 $collection = Word_relation::where('word_one', $word_id)->get(); $array = $collection->lists('word_one'); // >= Laravel 5.2 $collection = Word_relation::where('word_one', $word_id)->get(); $array = $collection->pluck('word_one');
źródło
Myślę, że możesz to osiągnąć za pomocą poniższego kodu
Model::get(['ColumnName'])->toArray();
źródło
Model::get(['ColumnName'])->toArray();
jest równoważne robieniu,Model::select('ColumnName')->get()->toArray()
które skutkuje wielowymiarową tablicą.