75

我正在尝试升级我的项目 L5.1 -> L5.2。在升级指南中,我不清楚一件事:

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

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

5.0 文档

从一行中检索单个列

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

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

更新:

例子:

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

L5.1:

// int(1)

L5.2:

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

5 回答 5

114

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

于 2015-12-21T22:28:25.350 回答
20

laravel pluck 返回一个数组

如果您的查询是:

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

那么数组是这样的(键是项目的索引。自动递增的值):

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

但如果你这样做:

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

那么关键是数据库中的实际索引。

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

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

于 2018-06-11T11:58:38.490 回答
16

在 Laravel 5.1+ 中,您可以使用 value() 代替 pluck。

要获得第一次出现,您可以使用

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

或使用,

DB::table('users')->where('id', 1)->pluck('name')->first();
于 2018-12-13T09:38:09.047 回答
12

我使用 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();
于 2020-07-02T20:37:43.060 回答
-1

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

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

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

Larvel 5.3:指定选择子句

于 2016-09-21T17:38:05.837 回答