gpt4 book ai didi

laravel - 首先使用查询构建器

转载 作者:行者123 更新时间:2023-12-04 04:48:15 24 4
gpt4 key购买 nike

如果我想使用 eloquent 获取数据库中第一个用户的名称,我可以执行以下操作:

$user =  User::select('name')->first()->pluck('name');
// or $user = User::first()->pluck('name');

echo $user;

仅以字符串形式获取此用户的名称。

但是,如果我仅使用查询构建器尝试相同的操作:
$user =  DB::table('users')->select('name')->first()->pluck('name');

echo $user;

我得到异常(exception):

Call to undefined method stdClass::pluck()



但是不先使用它会起作用:
$user =  DB::table('users')->select('name')->where('id',1)->pluck('name');

echo $user;

是不是不能用 pluckfirst使用查询生成器还是我做错了什么?

附注。当然,我知道我可以使用 $user->name 显示任何属性。不使用 pluck但我只是好奇为什么使用 Eloquent 可以工作,而使用 Query Builder 它仅在没有同时使用 first 时才有效和 pluck

最佳答案

您不想使用 pluckfirst ,因为它是多余的:

$query->first() // fetch first row
->pluck('name'); // fetch first row again and return only name

所以只能使用 pluck :
$query->pluck('name');

它可以满足您的所有需求。

但还有更多。

引擎盖下 firstpluck运行 2 个单独的查询,因此:
$query->where(..)->orderBy(..)->first() // apply where and orderBy
->pluck('name'); // no where and orderBy applied here!

所以使用 first不仅是多余的之前 pluck ,但也会导致意想不到的结果。

你可以在 Eloquent 查询上链接这些方法,因为它返回一个集合( get )或模型( first ),但是 Query\Builder只返回一个数组( get )或 stdObject ( first )。这就是为什么你不能在查询构建器上做同样的事情。

关于laravel - 首先使用查询构建器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26054354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com