2017-01-26 3 views
0

Я получаю коллекцию из запроса в Laravel.Обработка процесса через функцию карты

На самом деле, я обработка коллекции так:

foreach ($cts as $ct) { 
     $array[$ct->id] = $ct->category->name; 

    } 

Он выводит это:

array:2 [▼ 
1158 => "Junior por Equipo" 
1160 => "Varonil por Equipo" 
] 

Теперь я хотел бы функцию пользовательской карты() по коллекции MUY, как мне это нравится лучше:

MyModel::get() 
     ->get() 
     ->map(function ($item, $value){ 
      return [ $item->id => $item->category->name ]; 
     })->toArray(); 

Но теперь, я получаю:

array:2 [▼ 
    0 => array:1 [▼ 
    1158 => "Junior por Equipo" 
    ] 
    1 => array:1 [▼ 
    1160 => "Varonil por Equipo" 
    ] 
] 

Как сделать вывод, как в первом случае?

ответ

0

Вам не нужно отобразить коллекцию, просто используйте MyModel::lists('name', 'id') ;

+0

ОК, но как мне сделать, чтобы разрешить идентификатор для имени (имя находится в другой таблице). У меня будет MyModel :: get() -> pluck ('category_id', 'id'), но не MyModel :: get() -> pluck ('category_name,' id ') –

+0

списки функций должны работать с id также –

+0

id это не проблема, но как я должен использовать другое поле в другой таблице, поэтому я больше не могу использовать pluck/lists :( –

0

Существует метод сбора для этого. pluck() и красноречивый lists()

Нет предпочтения использовать выщипывание для получения только некоторых столбцов. Использовались ранее списки().

см https://laravel.com/docs/5.3/collections#method-pluck

, как говорится в документе

Метод срывать извлекает все значения для данного ключа/ключей только

так было бы что-то вроде этого.

Model::get()->pluck('name','id); 

Чем вы можете сделать toArray() для результата, если хотите получить массив вместо коллекции.

+0

Не работает ... В моем случае я могу сделать это с id, но другое поле является отношением, поэтому оно находится за пределами модели, поэтому отрыв не работает –