2017-01-26 11 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

okですが、idを名前に解決するにはどうすればよいですか(名前は別の表にあります)。私はMyModel :: get() - > pluck( 'category_id'、 'id')を持ちますが、MyModel :: get() - > pluck( 'category_name、' id ')を返します –

+0

関数はidでも動作するはずです –

+0

id問題はありませんが、私は他のフィールドを別のテーブルに使用する必要がありますので、私は捨てる/リストを使用することはできません:( –

0

を使用し、コレクションをマッピングする必要はありません。 pluck()およびeloquent lists()

いいえ、一部の列のみを取得するために使用することをお勧めしません。以前はlists()が使用されていました。文書は

を言うよう

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

を参照してくださいPluckの方法は

ので、それはこのようなものになるだろう与えられたキー/キーの値のすべてを取得します。

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

コレクションではなく配列を取得する場合は、結果にtoArray()を使用するよりも多くの結果が得られます。

+0

私の場合、私はidで行うことができますが、他のフィールドはリレーションであるため、モデルの外にあるので、抜けても機能しません –

関連する問題