Eloquent 只获取一列作为数组

Posted

技术标签:

【中文标题】Eloquent 只获取一列作为数组【英文标题】:Eloquent get only one column as an array 【发布时间】: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

【问题讨论】:

【参考方案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 子句

【讨论】:

以上是关于Eloquent 只获取一列作为数组的主要内容,如果未能解决你的问题,请参考以下文章

Eloquent Api 资源:显示数据透视表中的一列

仅当一个字段作为数组提供时,Laravel Eloquent 才插入多条记录

Laravel Eloquent:返回数组键作为字段 ID

Laravel Eloquent ID 作为数组键

PHP PDOStatement:获取一行,作为数组的键的第一列[重复]

如何从场景大纲中获取一列的值作为空手道中的数组