Как получить только один столбец как один размерный массив в laravel 5.2, используя красноречие?
Я пытался:
$array = Word_relation::select('word_two')->where('word_one', $word_id)->get()->toArray();
но этот дает его как двухмерный массив, например:
array(2) {
[0]=>
array(1) {
["word_one"]=>
int(2)
}
[1]=>
array(1) {
["word_one"]=>
int(3)
}
}
но я хочу получить это как:
array(2) {
[0]=>2
[1]=>3
}
laravel
eloquent
laravel-5.2
Riiwo
источник
источник
select
избыточности, но я не вижу проблемы с получением коллекции в результате, потому что коллекция - это просто причудливый массив, который можно повторять так же, как массив. Я редко использую массивы вместо коллекций, так как объем памяти, как правило, не является проблемой, и коллекции можно легко преобразовать в массивы, где это необходимо, поскольку они реализуютtoArray
метод. Однако для согласованности с вашим вопросом я изменил ответ, чтобы преобразовать результат.Collection
также естьpluck()
метод - то, что вы используете, является методомQueryBuilder
.Если вы получаете несколько записей, правильный метод называется списками .
Word_relation::select('word_two')->where('word_one', $word_id)->lists('word_one')->toArray();
источник
lists()
Отлично работает это сам. Спасибо.lists()
устарел в Laravel Ver.5.2 и более поздних версиях, где,pluck()
как и в отмеченном ответе, это путь.Вкратце это можно сделать так:
Model::pluck('column')
где модель - это модель, такая как
User
модель и столбец, как имя столбца, напримерid
если вы это сделаете
User::pluck('id') // [1,2,3, ...]
и, конечно, вы можете иметь любые другие предложения, такие как
where
clause, прежде чем сорватьисточник
Я столкнулся с этим вопросом и подумал, что уточню, что метод lists () красноречивого объекта-строителя был обесценен в Laravel 5.2 и заменен на 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();
Эти методы также могут быть вызваны в коллекции, например
// <= 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');
источник
Я думаю, вы можете добиться этого, используя приведенный ниже код
Model::get(['ColumnName'])->toArray();
источник
Model::get(['ColumnName'])->toArray();
эквивалентно тому,Model::select('ColumnName')->get()->toArray()
что в результате получается многомерный массив.