Laravel 5.2 - pluck()方法返回数组

时间:2015-12-21 22:07:54

标签: php laravel eloquent query-builder laravel-5.2

我试图升级我的项目L5.1 - > 15.2。在upgrade guide中,有一件事对我来说不清楚:

  

Collection,query builder和Eloquent查询的lists方法   构建器对象已重命名为pluck。方法签名   保持不变。

没关系,将重构从lists()重命名为pluck()并不是问题。但是L5.0和L5.1中的有用pluck()方法呢?

来自5.0 documentation

  

从一行中检索单个列

$name = DB::table('users')->where('name', 'John')->pluck('name');

L5.2中旧pluck()方法的替代方法是什么?

更新

示例:

var_dump(DB::table('users')->where('id', 1)->pluck('id'));

L5.1:

// int(1)

15.2:

// array(1) { [0]=> int(1) }

5 个答案:

答案 0 :(得分:74)

pluck()的当前替代方案是value()

答案 1 :(得分:4)

laravel pluck返回一个数组

如果您的查询是:

[
    1 => "name1",
    2 => "name2",
    .
    .
    .
    100 => "name100"
]

然后数组就像这样(键是项目的索引。自动递增值):

$name = DB::table('users')->where('name', 'John')->pluck('name','id');

但如果你喜欢这样:

key||value
[
    1 => "name1",
    2 => "name2",
    .
    .
    .
    100 => "name100"
]

然后键是数据库中的实际索引。

{{1}}

您可以将任何值设置为键。

答案 2 :(得分:3)

我使用laravel 7.x,并将其用作解决方法:->get()->pluck('id')->toArray();

它返回一个ID [50,2,3]数组,这是我使用的整个查询:

   $article_tags = DB::table('tags')
    ->join('taggables', function ($join) use ($id) {
        $join->on('tags.id', '=', 'taggables.tag_id');
        $join->where([
            ['taggable_id', '=', $id],
            ['taggable_type','=','article']
        ]);
    })->select('tags.id')->get()->pluck('id')->toArray();

答案 3 :(得分:1)

  

在Laravel 5.1+中,您可以使用value()而不是pluck。

要首次出现,您可以使用

DB::table('users')->value('name');

或使用

DB::table('users')->where('id', 1)->pluck('name')->first();

答案 4 :(得分:-2)

在原始示例中,为什么不在数据库查询中使用select()方法?

$name = DB::table('users')->where('name', 'John')->select("id");

这比使用PHP框架更快,因为它将利用SQL查询为您进行行选择。对于普通的收藏品,我不相信这适用,但因为你正在使用数据库......

Larvel 5.3:Specifying a Select Clause