Eloquent只获得一列作为数组

Rii*_*iwo 65 laravel eloquent laravel-5.2

如何在laravel 5.2中使用eloquent只获得一列作为一个维数?

我试过了:

$array = Word_relation::select('word_two')->where('word_one', $word_id)->get()->toArray();
Run Code Online (Sandbox Code Playgroud)

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

array(2) {
      [0]=>
      array(1) {
        ["word_one"]=>
        int(2)
      }
      [1]=>
      array(1) {
        ["word_one"]=>
        int(3)
      }
    }
Run Code Online (Sandbox Code Playgroud)

但我希望得到它:

array(2) {
    [0]=>2
    [1]=>3
}
Run Code Online (Sandbox Code Playgroud)

Bog*_*dan 143

您可以使用以下pluck方法:

Word_relation::where('word_one', $word_id)->pluck('word_two')->toArray();
Run Code Online (Sandbox Code Playgroud)

有关可用于集合的方法的更多信息,您可以查看Laravel文档.

  • 虽然`Collection`也有一个'动物内脏()`方法 - 你所使用的是一种方法[`QueryBuilder`(https://laravel.com/docs/5.4/queries#retrieving-results). (3认同)

小智 11

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

    Word_relation::select('word_two')->where('word_one', $word_id)->lists('word_one')->toArray();
Run Code Online (Sandbox Code Playgroud)

  • `lists()` 在 Laravel Ver.5.2 及更高版本中被弃用,其中 `pluck()` 就像在标记答案中一样。 (3认同)
  • 真棒!`lists()`可以自行运行.谢谢. (2认同)

APu*_*APu 8

这可以简而言之:

Model::pluck('column')
Run Code Online (Sandbox Code Playgroud)

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

如果你这样做

User::pluck('id') // [1,2,3, ...]
Run Code Online (Sandbox Code Playgroud)

& 当然你可以有任何其他条款,比如where在 pluck 之前的条款


Sam*_*ner 6

我遇到了这个问题,我想我会澄清一个 eloquent builder 对象的 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();
Run Code Online (Sandbox Code Playgroud)

例如,这些方法也可以在 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');
Run Code Online (Sandbox Code Playgroud)