雄辩地只获得一列作为数组


84

如何使用雄辩的方法在Laravel 5.2中仅将一列作为一维数组?

我努力了:

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

但这给它作为2维数组,如:

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

但我想得到它为:

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

Answers:


181

您可以使用以下pluck方法:

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

有关可用于collection的方法的更多信息,可以查阅Laravel文档


谢谢,那是我在某个地方看到的函数,但为了记录,没有找到它,为了答案是正确的,所以也许添加-> toArray(),因为它此时会返回colletion并且可以省略select至少来自laravel 5.2的查询。
Riiwo

关于select冗余确实如此,但是我没有看到集合的问题,因为集合只是一个可以在数组上迭代的奇特数组。我很少使用数组而不是集合,因为内存占用通常不是问题,并且由于集合可以实现该toArray方法,因此可以轻松将集合强制转换为需要的数组。但是,为了与您的问题保持一致,我修改了答案以进行结果转换。
Bogdan

目前,我对laravel和口才很陌生,因此我需要将它们作为数字数组,以便稍后将其与相似的数组合并,并在另一个查询中使用它
Riiwo 2016年

感谢您分享这个!
巴尔加夫Nanekalva '16

3
虽然aCollection也有pluck()方法-您正在使用的是方法QueryBuilder
Paul Spiegel

12

如果收到多个条目,则正确的方法称为“列表”

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

2
太棒了!该lists()由它自身工作正常。谢谢。
moreirapontocom

1
繁荣!这很完美。但是不需要使用toArray()函数,因为list()返回一个数组。
萨汉

1
lists()在Laravel Ver.5.2和更高版本中已弃用,pluck()如标记答案所示。
Masa Sakano,

7

可以简而言之做到:

Model::pluck('column')

其中model是Model,例如Usermodel&column作为列名,例如id

如果你这样做

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

&当然,您可以where在拔除之前设置其他任何子句,例如子句


5

我碰到了这个问题,以为我想澄清一下,雄辩的构建器对象的list()方法在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');

-3

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

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


你能解释一下吗?
J ... S

1
据我所知,做Model::get(['ColumnName'])->toArray();等同于做Model::select('ColumnName')->get()->toArray()一个多维数组。
SamBremner
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.