ChatGPT解决这个技术问题 Extra ChatGPT

Eloquent 只获取一列作为数组

如何使用 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
}

B
Bogdan

您可以使用 pluck 方法:

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

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


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

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

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

惊人的! lists() 自己工作正常。谢谢你。
繁荣!这完美地工作。但不需要使用 toArray() 函数,因为 lists() 返回一个数组。
lists() 在 Laravel Ver.5.2 及更高版本中已弃用,其中 pluck() 与标记答案中的方式相同。
A
APu

简而言之,可以这样做:

Model::pluck('column')

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

如果你这样做

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

&当然,您可以在 pluck 之前使用任何其他子句,例如 where 子句


S
SamBremner

我遇到了这个问题,并想我会澄清一下,雄辩的构建器对象的 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');

S
Salman Zafar

我认为您可以使用以下代码来实现它

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


你能解释一下吗。
据我所知,做 Model::get(['ColumnName'])->toArray(); 相当于做 Model::select('ColumnName')->get()->toArray() 导致多维数组。