我正在尝试升级我的项目 L5.1 -> L5.2。在 upgrade guide 中,我不清楚一件事:
Collection、查询构建器和 Eloquent 查询构建器对象的列表方法已重命名为 pluck。方法签名保持不变。
没关系,将重构从 lists()
重命名为 pluck()
不是问题。但是 L5.0 和 L5.1 中有用的 pluck()
方法呢?
从一行中检索单个列 $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) }
pluck()
表示从一行中选择 1 个字段。然后在 5.1 中,他们删除了 pluck()
并将其替换为 value()
。然后在 5.2 中,他们将返回整列的 lists()
替换为 pluck()
。因此,如果您从 4.2 开始就一直存在,您可能会感到困惑:/
pluck()
的当前替代方案是 value()
。
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"
]
您可以将任何值设置为键。
在 Laravel 5.1+ 中,您可以使用 value() 代替 pluck。
要获得第一次出现,您可以使用
DB::table('users')->value('name');
或使用,
DB::table('users')->where('id', 1)->pluck('name')->first();
我使用 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]
的数组时,已测试。
在原始示例中,为什么不在数据库查询中使用 select() 方法?
$name = DB::table('users')->where('name', 'John')->select("id");
这将比使用 PHP 框架更快,因为它将利用 SQL 查询为您进行行选择。对于普通的收藏,我认为这不适用,但是由于您使用的是数据库...
幼虫 5.3:Specifying a Select Clause
不定期副业成功案例分享
Illuminate\Support\Collection
):pluck
, ...”