web-dev-qa-db-ja.com

Laravel 5.2 pluck()Eloquent Model Collectionの複数の属性

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']
]
_

このためのエレガントなソリューションはありますか?

15
Fusion

これは最近の質問ではないことは知っていますが、後でグーグルから誰かがつまずいた場合は、 Only Collection Method をご覧ください

$lesson->users()->only("id", "name")->toArray();はあなたが求めているものでなければなりません。

26
Blake

これを試して:

$lesson->users()->select('id', 'name')->get()->toArray();
6
Abhishek

誰かが複数の属性を「摘み取り」、それらをキーイングしたい場合(例の結果は「名前」フィールドによってキー入力され、「値」はアイテム自体です-興味のある属性の配列を取得するためにそれを変更します):

$settings = \App\Setting::all()->map(function ($setting) {
    return ['key' => $setting->name, 'value' => $setting];
})->pluck('value', 'key')->toArray();
5
bruddha
$result = $lesson->users()->map(function($item){ 
  return array('id' => $item->id, 'name' => $item->name)
});

トリックを行う必要があります。

1
Mark

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

1
fayz

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で動作します

1
Corben