Laravel 5.2有很好的助手,我想用它们做以下事情:
我有Eloquent模型集合:
$lesson->users(); // returns Eloquent collection of 3 users
pluck()
函数会很有用,但它只能获得单个参数。但是我希望得到两个参数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();
如果有人想“摘取”多个属性并键入它们(示例结果由“name”字段键入,'value'是项本身 - 更改它以获取您感兴趣的属性数组):
$settings = \App\Setting::all()->map(function ($setting) {
return ['key' => $setting->name, 'value' => $setting];
})->pluck('value', 'key')->toArray();
pluck()辅助函数确实采用了第二个参数。然后它将返回一个关联数组,其中第二个参数定义键。所以你会得到key => value
对的结果。
如您所知,您的条目将包含id和name,这可能会有所帮助:
$lesson->users->pluck('name', 'id')->toArray();
这将返回:
[
10 => 'Michael Dook',
16 => 'Henry Babcock',
19 => 'Joe Nedd'
]
我不太确定Laravel 5.2,但这适用于Laravel 5.5
$result = $lesson->users()->map(function($item){
return array('id' => $item->id, 'name' => $item->name)
});
应该做的伎俩。
pluck()
仅用于为您提取单个值。不相关。
在单个集合中使用only(['id','name'])
。而不是一系列的集合。
e.g
$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