ChatGPT解决这个技术问题 Extra ChatGPT

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

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

Collection、查询构建器和 Eloquent 查询构建器对象的列表方法已重命名为 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)

L5.2:

// array(1) { [0]=> int(1) }
是的,这很令人困惑。在 5.0 中,pluck() 表示从一行中选择 1 个字段。然后在 5.1 中,他们删除了 pluck() 并将其替换为 value()。然后在 5.2 中,他们将返回整列的 lists() 替换为 pluck()。因此,如果您从 4.2 开始就一直存在,您可能会感到困惑:/

u
user1669496

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


谢谢!这绝对应该在升级指南中,因为它是重大变化。
我看到它在 5.1 的升级指南中:laravel.com/docs/5.2/upgrade#upgrade-5.1.0 糟糕的是,我没有在上一个版本中发现这个变化。
实际上有关于此更改的通知:“Eloquent 集合实例现在为以下方法返回一个基本集合 (Illuminate\Support\Collection):pluck, ...”
使用值要容易得多,因为它是现成的非数组形式。尤其是在切换类型操作中
@user1669496 谢谢先生
P
Peyman.H

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"
]

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


r
reshma

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

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

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

或使用,

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

F
Furqan S. Mahmoud

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

它返回一个 ids [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();

AModel::select('id',...)->where(...)->get()->pluck('id'); 给出 id 的整数值数组,当 AModel::select('id',...)->where(...)->get()->pluck('id')->toArray(); 给出类似 [0=>id0, 1=>id1,...., n=>idN] 的数组时,已测试。
J
Jeff Kopmanis

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

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

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

幼虫 5.3:Specifying a Select Clause


需要添加 ->get();您仍然需要使用 PHP 来格式化数组
php 操作比 Mysql 查询快得多。
@AnkitBalyan 你在讽刺吗? mysql 比 php 快得多。尝试在每个中处理一百万行...