Lim*_*nte 56 php query-builder laravel eloquent laravel-5.2
我正在尝试升级我的项目L5.1 - > L5.2.在升级指南中有一件事我不清楚:
"
lists集合","查询"构建器和"Eloquent查询"构建器对象上的方法已重命名为pluck.方法签名保持不变.
没关系,重新命名refactoting lists()到pluck()是没有问题.但是pluck()L5.0和L5.1中有用的方法是什么?
从5.0文档:
从一行中检索单个列
Run Code Online (Sandbox Code Playgroud)$name = DB::table('users')->where('name', 'John')->pluck('name');
pluck()L5.2中旧方法的替代方法是什么?
更新:
例:
var_dump(DB::table('users')->where('id', 1)->pluck('id'));
Run Code Online (Sandbox Code Playgroud)
L5.1:
// int(1)
Run Code Online (Sandbox Code Playgroud)
15.2:
// array(1) { [0]=> int(1) }
Run Code Online (Sandbox Code Playgroud)
use*_*496 85
目前的替代方案pluck()是value().
res*_*hma 12
在 Laravel 5.1+ 中,您可以使用 value() 代替 pluck。
要获得第一次出现,您可以使用
DB::table('users')->value('name');
Run Code Online (Sandbox Code Playgroud)
或使用,
DB::table('users')->where('id', 1)->pluck('name')->first();
Run Code Online (Sandbox Code Playgroud)
laravel pluck返回一个数组
如果您的查询是:
$name = DB::table('users')->where('name', 'John')->pluck('name');
Run Code Online (Sandbox Code Playgroud)
那么数组就是这样(键是项目的索引。自动递增的值):
[
1 => "name1",
2 => "name2",
.
.
.
100 => "name100"
]
Run Code Online (Sandbox Code Playgroud)
但是,如果您这样做:
$name = DB::table('users')->where('name', 'John')->pluck('name','id');
Run Code Online (Sandbox Code Playgroud)
那么关键是数据库中的实际索引。
key||value
[
1 => "name1",
2 => "name2",
.
.
.
100 => "name100"
]
Run Code Online (Sandbox Code Playgroud)
您可以将任何值设置为键。
我使用 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();
Run Code Online (Sandbox Code Playgroud)