Fus*_*ion 18 helpers laravel-collection laravel-5.2
Laravel 5.2有很好的助手,我想用它们做以下事情:
我有Eloquent模型集合:
$lesson->users(); // returns Eloquent collection of 3 users
Run Code Online (Sandbox Code Playgroud)
pluck()函数会很有用,但它只能得到单个参数.但是我希望得到两个参数的输出,id并且name像这样:
[
1=>['id'=>10,'name'=>'Michael Dook'],
2=>['id'=>16,'name'=>'Henry Babcock'],
3=>['id'=>19,'name'=>'Joe Nedd']
]
Run Code Online (Sandbox Code Playgroud)
这有什么优雅的解决方案吗?
Bla*_*ake 28
我知道这不是最近的问题,但如果以后有人从谷歌上绊倒它,请参阅唯一收集方法
$lesson->users()->only("id", "name")->toArray(); 应该是你想要的.
fay*_*ayz 13
Laravel:5.7
如果方法正在返回关系
用 get()
例如
$lesson = Lesson::find(1);
$lesson->users()->get(['id', 'name']);
Run Code Online (Sandbox Code Playgroud)
关于收藏
用 only()
$user = collect(['id' => 1, 'name' => 'Foo', 'role' => 'A']);
$user->only(['id', 'name']);
Run Code Online (Sandbox Code Playgroud)
多个阵列
$users = collect([
['id' => 1, 'name' => 'Foo', 'role' => 'A'],
['id' => 2, 'name' => 'Bar', 'role' => 'B'];
]);
$result = $users->map(function($user){
return Arr::only($user, ['id', 'name']);
});
var_dump($result);
Run Code Online (Sandbox Code Playgroud)
试试这个:
$lesson->users()->select('id', 'name')->get()->toArray();
Run Code Online (Sandbox Code Playgroud)
如果有人要“采摘”多个属性并键入它们(示例结果由“名称”字段键入键,则“值”本身就是项目-对其进行更改以获取您感兴趣的属性数组):
$settings = \App\Setting::all()->map(function ($setting) {
return ['key' => $setting->name, 'value' => $setting];
})->pluck('value', 'key')->toArray();
Run Code Online (Sandbox Code Playgroud)
正如问题中所述,$lesson->users()返回“3 位用户的雄辩集合”。users()这与课程模型上的关系不同,许多答案错误地假设了这种关系,在这种情况下它将返回查询生成器。
假设集合中的用户是 Eloquent 模型,从 Laravel 5.5 开始你可以简单地这样做:
$lesson->users()->map->only('id', 'name');
Run Code Online (Sandbox Code Playgroud)
如果用户是普通数组,您可以使用:
$lesson->users()->map(fn ($user) => Arr::only($user, ['id', 'name']));
Run Code Online (Sandbox Code Playgroud)
$result = $lesson->users()->map(function($item){
return array('id' => $item->id, 'name' => $item->name)
});
Run Code Online (Sandbox Code Playgroud)
应该做到这一点。
| 归档时间: |
|
| 查看次数: |
25954 次 |
| 最近记录: |