2016-01-20 1 views
24

Как получить только один столбец как один размерный массив в laravel 5.2 с использованием красноречивого?Eloquent получает только один столбец в виде массива

Я попытался:

$array = Word_relation::select('word_two')->where('word_one', $word_id)->get()->toArray(); 

, но это один дает как 2 х мерном массиве как:

array(2) { 
     [0]=> 
     array(1) { 
     ["word_one"]=> 
     int(2) 
     } 
     [1]=> 
     array(1) { 
     ["word_one"]=> 
     int(3) 
     } 
    } 

, но я хочу, чтобы получить его, как:

array(2) { 
    [0]=>2 
    [1]=>3 
} 

ответ

62

Вы можете используйте метод pluck:

Word_relation::where('word_one', $word_id)->pluck('word_two')->toArray(); 

Для получения дополнительной информации о том, какие методы доступны для использования с коллекцией, вы можете проверить Laravel Documentation.

+0

Спасибо, что была функция, я где-то видел, но не нашел его больше, а также для записи, для ответа на а затем добавьте -> toArray(), так как он возвращает colletion в данный момент, и выбор может быть исключен из запроса для laravel 5.2 по крайней мере. – Riiwo

+0

Правда о том, что 'select' является избыточным, но я не вижу проблемы с наличием коллекции в результате, потому что коллекция - это просто массив _fancy_, который может быть повторен по сравнению с массивом. Я редко использую массивы вместо коллекций, поскольку объем памяти обычно не является проблемой, и коллекции могут быть легко перенесены в массивы там, где это необходимо, потому что они реализуют ['toArray'] (https://github.com/laravel/framework/blob /5.2/src/Illuminate/Support/Collection.php#L961-L967). Однако для согласованности с вашим вопросом я изменил ответ, чтобы преобразовать результат. – Bogdan

+0

На данный момент я совершенно новичок в laravel и eloquent, поэтому мне нужны были эти массивы чисел, чтобы позже объединить массив с похожим и использовать его в другом запросе – Riiwo

6

Если вы получаете несколько записей, правильный метод называется lists.

Word_relation::select('word_two')->where('word_one', $word_id)->lists('word_one')->toArray(); 
+1

Удивительный! 'Lists()' отлично работает сам. Спасибо. – moreirapontocom

+1

Бум! Это прекрасно работает. Но не нужно использовать функцию toArray(), потому что lists() возвращает массив. – Sahan

-2

Я думаю, что вы можете достичь его Model :: получить ([ 'ColumnName']) -> ToArray();

+0

Не могли бы вы объяснить это. –

+0

Насколько мне известно, команда 'Model :: get (['ColumnName']) -> toArray();' эквивалентна выполнению 'Model :: select ('ColumnName') -> get() -> toArray () ', что приводит к многомерному массиву. – SamBremner

0

Я столкнулся с этим вопросом и подумал, что уточню, что метод list() объекта элитного объекта был амортизирован в 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'); 

 Смежные вопросы

  • Нет связанных вопросов^_^