Laravel 使用查询生成器与第一个一起提取
如果我想使用eloquent获得数据库中第一个用户的名称,我可以这样做:Laravel 使用查询生成器与第一个一起提取,laravel,laravel-4,eloquent,Laravel,Laravel 4,Eloquent,如果我想使用eloquent获得数据库中第一个用户的名称,我可以这样做: $user = User::select('name')->first()->pluck('name'); // or $user = User::first()->pluck('name'); echo $user; 以字符串形式获取此用户的唯一名称 但是,如果仅使用查询生成器尝试相同的操作: $user = DB::table('users')->select('name')->
$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;
我得到一个例外:
调用未定义的方法stdClass::pull()
但如果不先使用,它将起作用:
$user = DB::table('users')->select('name')->where('id',1)->pluck('name');
echo $user;
是否无法使用查询生成器将pulk
与first
一起使用,还是我做错了什么
注:当然我知道我可以使用
$user->name
显示任何属性,而不必使用pulk
,但我只是好奇为什么使用Eloquent它可以工作,而使用Query Builder它只能在没有first
和pulk的情况下工作。你不想使用pulk
和first
的情况下工作,因为它是多余的:
$query->first() // fetch first row
->pluck('name'); // fetch first row again and return only name
因此,只需使用拔出
:
$query->pluck('name');
它能满足你所有的需要
但还有更多
在引擎盖下,首先运行两个独立的查询,以便:
$query->where(..)->orderBy(..)->first() // apply where and orderBy
->pluck('name'); // no where and orderBy applied here!
因此,在pull
之前先使用不仅是多余的,而且还会导致意外的结果
您可以在雄辩的查询上链接这些方法,因为它返回集合(get
)或模型(first
),但query\Builder
只返回数组(get
)或stdObject
(first
)。这就是为什么在查询生成器上不能执行相同的操作。请尝试以下操作:
$user = User::pluck('name')->first();
echo $user;
在Laravel 5.1+中,可以使用value
方法
从文档中:
如果甚至不需要整行,可以提取单个值
使用value方法从记录中删除。此方法将返回
直接输入列的值:
$email = DB::table('users')->where('name', 'John')->value('email');
以下是它在生成器类中的幕后工作方式:
/**
* Get a single column's value from the first result of a query.
*
* @param string $column
* @return mixed
*/
public function value($column)
{
$result = (array) $this->first([$column]);
return count($result) > 0 ? reset($result) : null;
}
pluck()的当前备选方案是value()
要获得第一次出现,您可以使用
DB::table('users')->value('name');
或使用,
DB::table('users')->pluck('name')->first();
谢谢,同样没有足够的文档。我认为在本例中,它只是获取所有列,并只返回一个或修改查询(当您不使用select时)并且再次只返回所选的columnUpvoting,因为这个答案比我的好。@MarcinNabiałek多亏了\uu call
magic methods everywhere调用pluck
,在雄辩模型上代理对雄辩\Builder
的调用,这就是为什么您可以首先对的结果执行此操作的原因。您可能甚至没有注意到它只是运行了另一个查询—这里就是这样。在本例中,最好使用User::select('name')->value('name')选项,建议@JorenDidn不要看到laravel-4标记,谢谢!我会更新我的答案。它可能对其他人有用。在我做value()之前,我得到了一堆不同的值类型。非常有用$考试=\App\Modules::where('id',$id)->value('exames');它以简单的值类型(int或string)而不是对象或集合返回我想要的检查ID。Laravel框架5.5.44