【问题标题】:Eloquent get only one column as an arrayEloquent 只获取一列作为数组
【发布时间】:2016-04-27 00:29:19
【问题描述】:

如何使用 eloquent 在 laravel 5.2 中仅获取一列作为一维数组?

我试过了:

$array = Word_relation::select('word_two')->where('word_one', $word_id)->get()->toArray();

但是这个是二维数组,比如:

array(2) {
      [0]=>
      array(1) {
        ["word_one"]=>
        int(2)
      }
      [1]=>
      array(1) {
        ["word_one"]=>
        int(3)
      }
    }

但我想得到它:

array(2) {
    [0]=>2
    [1]=>3
}

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    您可以使用pluck 方法:

    Word_relation::where('word_one', $word_id)->pluck('word_two')->toArray();
    

    有关可用于收集的方法的更多信息,您可以查看Laravel Documentation

    【讨论】:

    • 谢谢,那是我在某处看到的函数,但再也找不到了,也为了记录,为了答案是准确的,然后可能添加 ->toArray() 因为它返回集合至少可以从 laravel 5.2 的查询中忽略 moment 和 select。
    • 确实select 是多余的,但我认为有一个集合没有问题,因为集合只是一个 fancy 数组,它可以像数组一样迭代。我很少使用数组而不是集合,因为内存占用通常不是问题,并且集合可以在需要的地方轻松转换为数组,因为它们实现了toArray 方法。但是,为了与您的问题保持一致,我修改了答案以转换结果。
    • 目前我对 laravel 和 eloquent 还很陌生,所以我需要这些作为数字数组,以便稍后将数组与类似的数组合并并在另一个查询中使用它
    • 感谢您分享这个!
    • 虽然Collection 也有pluck() 方法 - 您使用的是QueryBuilder 的方法。
    【解决方案2】:

    如果您收到多个条目,则正确的方法称为lists

        Word_relation::select('word_two')->where('word_one', $word_id)->lists('word_one')->toArray();
    

    【讨论】:

    • 太棒了! lists() 自己可以正常工作。谢谢。
    • 轰隆隆!这完美地工作。但是不需要使用 toArray() 函数,因为 lists() 返回一个数组。
    • lists() 在 Laravel Ver.5.2 及更高版本中已弃用,其中pluck() 标记答案中的方式是这样。
    【解决方案3】:

    我认为你可以使用下面的代码来实现它

    Model::get(['ColumnName'])->toArray();

    【讨论】:

    • 你能解释一下吗?
    • 据我所知,Model::get(['ColumnName'])->toArray(); 等同于Model::select('ColumnName')->get()->toArray(),这会产生一个多维数组。
    【解决方案4】:

    我遇到了这个问题,并想我会澄清一个 eloquent builder 对象的 lists() 方法在 Laravel 5.2 中被贬低并被 pluck() 取代。

    // <= Laravel 5.1
    Word_relation::where('word_one', $word_id)->lists('word_one')->toArray();
    // >= Laravel 5.2
    Word_relation::where('word_one', $word_id)->pluck('word_one')->toArray();
    

    这些方法也可以在 Collection 上调用,例如

    // <= Laravel 5.1
      $collection = Word_relation::where('word_one', $word_id)->get();
      $array = $collection->lists('word_one');
    
    // >= Laravel 5.2
      $collection = Word_relation::where('word_one', $word_id)->get();
      $array = $collection->pluck('word_one');
    

    【讨论】:

      【解决方案5】:

      这可以简而言之:

      Model::pluck('column')
      

      其中模型是模型,例如 User 模型和列作为列名,例如 id

      如果你这样做了

      User::pluck('id') // [1,2,3, ...]
      

      & 当然你可以在 pluck 之前添加任何其他子句,例如 where 子句

      【讨论】:

        猜你喜欢
        • 2020-07-08
        • 2021-08-30
        • 2020-11-25
        • 1970-01-01
        • 2021-08-13
        • 1970-01-01
        • 2013-10-19
        • 2018-10-21
        • 1970-01-01
        相关资源
        最近更新 更多