当前位置: 首页 > 知识库问答 >
问题:

仅从Laravel集合获取特定属性

卞云瀚
2023-03-14

我一直在查看Laravel系列的文档和API,但似乎没有找到我想要的:

我想从集合中检索具有模型数据的数组,但只获取指定的属性。

例如,类似于Users::toArray('id','name','email'),其中集合实际上包含用户的所有属性,因为它们在其他地方使用,但在这个特定位置,我需要一个包含userdata的数组,并且只包含指定的属性。

在拉雷维尔,似乎没有一个帮手来帮你我怎样才能用最简单的方法做到这一点?

共有3个答案

韩良策
2023-03-14

下面的方法也有效。

$users = User::all()->map(function ($user) {
  return collect($user)->only(['id', 'name', 'email']);
});
匡旭东
2023-03-14

使用User::get(['id'、'name'、'email']),它将返回一个包含指定列的集合,如果您想将其设置为数组,只需在get()方法之后使用toArray(),如下所示:

用户::获取(['id','name','email'])-

大多数情况下,您不需要将集合转换为数组,因为集合实际上是类固醇上的数组,并且您有易于使用的方法来操作集合。

慕才
2023-03-14

您可以使用现有的Collection方法的组合来实现这一点。一开始可能有点难以遵循,但应该很容易崩溃。

// get your main collection with all the attributes...
$users = Users::get();

// build your second collection with a subset of attributes. this new
// collection will be a collection of plain arrays, not Users models.
$subset = $users->map(function ($user) {
    return collect($user->toArray())
        ->only(['id', 'name', 'email'])
        ->all();
});

解释

首先,map()方法基本上只是迭代集合,并将集合中的每个项传递给传入的回调。每次回调调用返回的值构建由map()方法生成的新集合。

收集($user-

-

-

把它们放在一起,您会得到“对于用户集合中的每个用户,返回一个仅包含id、名称和电子邮件属性的数组。”

Laravel5.5在模型上添加了一个only方法,该方法基本上与用户做相同的事情-

// get your main collection with all the attributes...
$users = Users::get();

// build your second collection with a subset of attributes. this new
// collection will be a collection of plain arrays, not Users models.
$subset = $users->map(function ($user) {
    return $user->only(['id', 'name', 'email']);
});

如果您将此与Laravel 5.4中引入的集合的“高阶消息”相结合,它可以进一步简化:

// get your main collection with all the attributes...
$users = Users::get();

// build your second collection with a subset of attributes. this new
// collection will be a collection of plain arrays, not Users models.
$subset = $users->map->only(['id', 'name', 'email']);

 类似资料:
  • 我想从最终结果中删除一些属性,并在这里找到了这个从Laravel集合中仅获取特定属性 这适用于顶层,但需要从相关项目中删除一些属性,例如用户有一个访问卡,并且访问卡的属性中有一些长文本详细信息。 我想从最终结果中删除该属性。使用链接中提到的方法是否可行?

  • 在Laravel中,如果执行查询: ...然后,是模型对象的集合。(基本上是一系列模型。) 但是,此数组的键仅为: ...所以如果我想改变,比如说,为24的对象,我不能这样做: ...因为这只会改变数组中的第25个元素,而不是id为24的元素。 如何通过任何属性/列(例如但不限于id/Color/age/etc)从集合中获取单个(或多个)元素? 当然,我可以这样做: ...但是,那太恶心了。 当然

  • 如果我有一个实体和一些惰性集合(、、,...),并且希望编写一个JpaRepository-method,该方法为我提供所有的人,这些人都渴望获取,这可能吗? 我知道人们可以在单个物体上做到这一点,但这在某种程度上可以在人的集合上做到吗?

  • 我正在用Laravel 5.2开发一个Web应用程序,但有一个问题我无法解决。 我有一个扩展了雄辩模型的模型,但当我试图输出带有“where”的数据库表时,例如 它返回一个包含许多信息的集合,这些信息此时对我来说无用,比如“守卫”、“键入”...我的表的数据在“属性”下。遵循laravel的指南,我看到每个人都像我一样简单地使用它,然后用

  • 我有一个XML文件,我想取两个值。以下是XML: 我想让我们说一下<代码> 这是我尝试过的代码,但它不起作用: 有人能给我一个工作的例子吗?我是Java和XML的新手。

  • 在Cloud Foreshore的这个文档中,提到了对集合ID列表的请求,您需要支付一个文档的阅读费用。 现在我正在为我的项目使用AngularFire和Ionic3。我的要求是只从一个有在哪里条件的集合中获取集合ID。如果我这样做,它将花费我的读取数=结果中的文档数。 我无法使用我在一些地方找到的方法。 请让我知道,如果你有一个解决方案。