【问题标题】:Laravel get single column result as stringLaravel 将单列结果作为字符串获取
【发布时间】:2016-10-19 09:26:27
【问题描述】:

您好,我想知道是否可以将列值作为字符串获取。而不是数组中的数组:

当前查询:Number::limit('1000')->get(['number'])->toArray()

此刻的结果是这样的:

最好的结果:

【问题讨论】:

    标签: php arrays laravel laravel-5


    【解决方案1】:

    在您的toArray() 调用之前,添加pluck('number')

    $result = Number::limit('1000')->get(['number'])->pluck('number')->toArray();
    

    就是这样!这将从您的结果集合中仅提取 number 属性,并为您提供一个单级数组。


    之所以有效,是因为您从get() 获得了一个集合:

    Eloquent 返回的所有多结果集都是 Illuminate\Database\Eloquent\Collection 对象的实例,包括通过 get 方法检索或通过关系访问的结果。

    还有pluck 方法:

    https://laravel.com/docs/5.1/collections#method-pluck


    更新

    @wunch 在 cmets 中提供的另一种更简洁的方法:

    $result = Number::limit('1000')->lists('number')->toArray();
    

    【讨论】:

    • 看起来很有希望,但没有奏效。数组结果中仍然是同一个数组。
    • 它现在这样工作:$result = Number::limit('1000')->get(['number'])->toArray(); $results = collect($result)->flatten(); dd($results); 但不是这个(第一个代码):$result = Number::limit('1000')->get(['number'])->flatten()->toArray(); dd($result);
    • 更新了我的答案。而不是转换为数组,返回集合,然后再次数组......使用 pluck。之前的解决方案 (flatten) 在普通集合上效果很好,但我同意它在 Eloquent 对象集合上失败了。在本地测试,并在 Eloquent 合集上进行采摘。
    • 太棒了! Laravel Collections 非常强大。就在昨天,我读完了我强烈推荐的this book。如何轻松操作数据结构真的很酷。
    • 这是一个常见的需求,以至于 Laravel 查询构建器实际上有一个内置的方法来为你做列提取:Number::limit('1000')->lists('short_name')->all()。我还应该注意,如果您有大量数据并且担心性能,您可能应该在其中添加一个 select 语句来告诉数据库只返回该列(而不是整个模型的数据)。
    猜你喜欢
    • 2012-05-11
    • 1970-01-01
    • 2013-12-29
    • 2021-05-12
    • 2011-03-07
    • 1970-01-01
    • 2020-04-09
    • 2013-09-29
    • 1970-01-01
    相关资源
    最近更新 更多