【问题标题】:How to return an array instead of a collection in Laravel?如何在 Laravel 中返​​回一个数组而不是一个集合?
【发布时间】:2016-06-21 19:17:03
【问题描述】:

在 Laravel 中是否可以只选择一个字段并将其作为集合/数组返回。

例如考虑模型Foo,它链接到表foos,该表具有字段idabc

考虑以下示例数据:

(1, 10, 15, 20)
(1, 12, 15, 27)
(1, 17, 15, 27)
(1, 25, 16, 29)
(1, 28, 16, 40)

现在,如果我想创建一个返回 a 的所有值的查询,其中 b15,我可以这样做:

Foo::select('a')->where('b', 15)->get();

然而,这将返回一个雄辩的集合。

我怎样才能返回这样的数组:

[10, 12, 17]

【问题讨论】:

    标签: laravel model laravel-5


    【解决方案1】:

    只需使用pluck()->toArray()

    Foo::where('b', 15)->pluck('a')->toArray();
    

    Laravel's pluck() method.

    Laravel's toArray() method.

    【讨论】:

    • 但这不是返回一个关联数组吗?
    • 是的,您必须使用 pluck() 来选择一个特定的列。我编辑了我的答案
    • 刚刚尝试过,它可以按照您想要的方式使用 pluck(或列表,因为 lists() 是 pluck() 的别名)和 toArray()
    • 我的新知识..tq :)
    【解决方案2】:

    Foo::where('b', 15)->lists('a')->all();
    

    这将为您提供一个 id 数组。例如 [2, 3, 5]

    【讨论】:

    • listsall 是什么意思
    • lists 会将结果转换为集合,而 all 会将其变为数组。但在 laravel 4 中,您只能使用 lists,它会将您的结果转换为数组。
    • 所以我不能也写Foo::select('a')->where('b', 15)->all();`
    • 没有。有了你想要的,你就不能使用 select 和 all。你会得到一个集合。但是如果你将 all 更改为 get()->toArray() 你会得到一个关联数组。所以最好是使用 listsall
    • @YahyaUddin lists 方法只是 pluck 的别名,@Mushr00m 在他的回答中得到了很好的例证。 Laravel 文档清楚地解释了what methods a Collection offers 以及它们的作用。
    【解决方案3】:

    lists 方法已弃用,pluck 需要一些参数,因此,如果您想以数组格式获取所有属性,请使用这种方式。

    Foo::select('a')->where('b', 15)->get()->all();

    【讨论】:

      猜你喜欢
      • 2019-05-18
      • 2020-05-15
      • 2016-05-03
      • 1970-01-01
      • 2015-04-30
      • 2018-12-07
      • 1970-01-01
      • 2016-06-27
      • 1970-01-01
      相关资源
      最近更新 更多