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

时间:2016-05-10 14:31:44

标签: laravel-5.2 helpers laravel-collection

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

我有Eloquent Model Collection:

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

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

8 个答案:

答案 0 :(得分:25)

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

$lesson->users()->only("id", "name")->toArray();应该是您追求的目标。

答案 1 :(得分:6)

试试这个:

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

答案 2 :(得分:5)

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

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

答案 3 :(得分:3)

如问题所述,$lesson->users()返回“ 3个用户的口才集合”。这和users()是一个Lesson模型上的关系是不一样的,它错误地假定了许多答案,在这种情况下,它将返回查询生成器。

假设集合中的用户是Eloquent模型,由于Laravel 5.5,您可以轻松地做到这一点:

$lesson->users()->map->only('id', 'name');

如果用户是纯数组,则可以改用:

$lesson->users()->map(fn ($user) => Arr::only($user, ['id', 'name']));

答案 4 :(得分:1)

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

应该做到这一点。

答案 5 :(得分:1)

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']);
});

注意:

了解模型及其返回集合或查询构建器对象很重要。

集合方法将适用于扩展口才Illuminate\Database\Eloquent\Model

的模型

有关收藏集https://laravel.com/docs/5.8/collections#introduction

的更多信息

答案 6 :(得分:0)

pluck()辅助函数确实采用了第二个参数。然后它将返回一个关联数组,其中第二个参数定义键。因此,您将获得key => value对的结果。

如您所知,您的参赛作品将包含ID和名称,这可能会有所帮助:

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

这将返回:

[
   10 => 'Michael Dook',
   16 => 'Henry Babcock',
   19 => 'Joe Nedd'
]

我不确定Laravel 5.2,但这适用于Laravel 5.5

答案 7 :(得分:0)

在Laravel 6中。^

收集方法->only()仅返回集合中给定的ID。

->get()方法中,您可以指定要返回的列。 在集合上,可以使用方法->keyBy('id')设置数组的键。

要返回以id为键的记录以及包含id和name的数组,请使用以下代码:

$lesson->users()->get(['id', 'name'])->keyBy('id')->toArray()