だから私はEloquentでこれを行うことができます:
$roles = DB::table('roles')->lists('title', 'name');
しかし、Eloquentに、1つの列だけでなく、個別のキーごとに値の配列をフェッチさせる方法はありますか?
たとえば、次のようなもの:
$roles = DB::table('roles')->lists(['*', DB:raw('COALESCE(value, default_value)')], 'name');
keyBy
メソッドを使用できます。
$roles = Role::all()->keyBy('name');
Eloquentを使用していない場合は、独自にコレクションを作成できます。
$roles = collect(DB::table('roles')->get())->keyBy('name');
Laravel 5.3+を使用している場合、クエリビルダは実際にコレクションを返すようになりました。そのため、手動で再度コレクションにラップする必要はありません。
$roles = DB::table('roles')->get()->keyBy('name');
key/value
配列が必要な場合、Laravel 5.1
からpluck
を使用できます。この方法で、value
およびkey
として使用する属性を指定できます。
$plucked = MyModel::all()->pluck('MyNameAttribute', 'MyIDAttribute');
return $plucked->all();
次のように配列を取得します。
array:3 [▼
1 => "My MyNameAttribute value"
2 => "Lalalala"
3 => "Oh!"
]
次のようなものを試すことができます:
_$roles = array();
array_map(function($item) use (&$roles) {
$roles[$item->id] = (Array)$item; // object to array
}, DB::table('roles')->get());
_
値としてObject
の代わりにArray
を取得したい場合は、_(Array)
_を削除するだけです。
代替:Eloquent
モデルの使用(_DB::table
_の代わり):
_$roles = array();
array_map(function($item) use (&$roles) {
$roles[$item['id']] = $item;
}, Role::all()->toArray());
_
別の代替:Collection::map()
メソッドの使用:
_$roles = array();
Role::all()->map(function($item) use(&$roles) {
$roles[$item->id] = $item->toArray();
});
_