Laravel 5.2采用Eloquent Model Collection中的多个属性

问题描述 投票:15回答:6

Laravel 5.2有很好的助手,我想用它们做以下事情:

我有Eloquent模型集合:

$lesson->users(); // returns Eloquent collection of 3 users

pluck()函数会很有用,但它只能获得单个参数。但是我希望得到两个参数idname的输出,如下所示:

[
1=>['id'=>10,'name'=>'Michael Dook'],
2=>['id'=>16,'name'=>'Henry Babcock'],
3=>['id'=>19,'name'=>'Joe Nedd']
]

这有什么优雅的解决方案吗?

laravel-5.2 helpers laravel-collection
6个回答
25
投票

我知道这不是最近的问题,但是如果有人在谷歌之后偶然发现它,请参阅Only Collection Method

$lesson->users()->only("id", "name")->toArray();应该是你想要的。


6
投票

试试这个:

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

5
投票

如果有人想“摘取”多个属性并键入它们(示例结果由“name”字段键入,'value'是项本身 - 更改它以获取您感兴趣的属性数组):

$settings = \App\Setting::all()->map(function ($setting) {
    return ['key' => $setting->name, 'value' => $setting];
})->pluck('value', 'key')->toArray();

1
投票

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


1
投票
$result = $lesson->users()->map(function($item){ 
  return array('id' => $item->id, 'name' => $item->name)
});

应该做的伎俩。


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.