我试图升级我的项目L5.1 - > 15.2。在upgrade guide中,有一件事对我来说不清楚:
Collection,query builder和Eloquent查询的
lists
方法 构建器对象已重命名为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)
15.2:
// array(1) { [0]=> int(1) }
答案 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