Laravel 5.2にはすてきなニースヘルパーがあります。これらを使用して、以下を実行します。
Eloquent Model Collectionがあります:
_$lesson->users(); // returns Eloquent collection of 3 users
_
pluck()
関数は便利ですが、パラメーターを1つだけ取得できます。ただし、次のように2つのパラメーター、id
およびname
を使用して出力を取得します。
_[
1=>['id'=>10,'name'=>'Michael Dook'],
2=>['id'=>16,'name'=>'Henry Babcock'],
3=>['id'=>19,'name'=>'Joe Nedd']
]
_
このためのエレガントなソリューションはありますか?
これは最近の質問ではないことは知っていますが、後でグーグルから誰かがつまずいた場合は、 Only Collection Method をご覧ください
$lesson->users()->only("id", "name")->toArray();
はあなたが求めているものでなければなりません。
これを試して:
$lesson->users()->select('id', 'name')->get()->toArray();
誰かが複数の属性を「摘み取り」、それらをキーイングしたい場合(例の結果は「名前」フィールドによってキー入力され、「値」はアイテム自体です-興味のある属性の配列を取得するためにそれを変更します):
$settings = \App\Setting::all()->map(function ($setting) {
return ['key' => $setting->name, 'value' => $setting];
})->pluck('value', 'key')->toArray();
$result = $lesson->users()->map(function($item){
return array('id' => $item->id, 'name' => $item->name)
});
トリックを行う必要があります。
pluck()
は、単一の値を取り出すためだけのものです。関係ありません。
単一のコレクションでonly(['id','name'])
を使用します。むしろコレクションの配列。
例えば
$collection = collect(['id' => 1, 'name' => 'Taylor']);
$collection->only(['name']);
コレクションの配列に対してこれを行うには
$helloworld = collect([
['id' => 1, 'name' => 'Taylor'],
['id' => 2, 'name' => 'Some Guy'];
]);
地図を使用
$helloworld->map(function($aSingleCollection){
return $aSingleCollection->only(['name']);
});
注意:
モデルと、コレクションまたはクエリビルダーオブジェクトを返すモデルを理解することが重要です。
コレクションメソッドは、Eloquentを拡張するモデルに適用されますIlluminate\Database\Eloquent\Model
コレクションの詳細 https://laravel.com/docs/5.8/collections#introduction
Pluck()ヘルパー関数は2番目のパラメーターを取ります。次に、2番目のパラメーターがキーを定義する連想配列を返します。したがって、key => value
ペアの結果が得られます。
エントリがIDと名前で構成されていることを知っているように、これが役立つかもしれません:
$lesson->users->pluck('name', 'id')->toArray();
これは戻ります:
[
10 => 'Michael Dook',
16 => 'Henry Babcock',
19 => 'Joe Nedd'
]
Laravel 5.2についてはわかりませんが、これはLaravel 5.5で動作します