为什么在User :: first()上调用方法有效,但是User :: where(...)没有?

时间:2016-06-20 13:51:30

标签: php mysql laravel artisan

在php artisan tinker中运行并返回true:

>>> User::first()->is('admin');
=> true

返回错误:

>>> User::where('id', 1)->is('admin');
BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder\::is()'

为什么会这样?

4 个答案:

答案 0 :(得分:3)

因为在使用->where()构建集合时,->first()会返回模型。

为了让eloquent返回模型,您需要通过添加->get()

来要求它执行查询

然而,这也会返回一个集合。您可以使用->first()

解决此问题
User::where('id', 1)->first()->is('admin');

修改评论

尝试这样做,但上面的代码应该有效。

$user = User::where('id', 1)->first();
$isAdmin = $user->is('admin');

答案 1 :(得分:1)

User :: first()会返回用户类对象

User :: where('id',1)返回雄辩的查询对象

这就是它无法正常工作的原因。

然而 User :: where('id',1) - > get(); 将给出结果行数组。但这也无法调用is()on。

答案 2 :(得分:0)

在您的顶部示例中,您可以定义所需内容:

.wrapper {
  overflow: auto;
}

然后你找回它:

User;

在您的底部示例中,您还可以定义所需内容:

first();

但是你不能在任何地方检索它。所以暂时不能 User::where('id', 1); ,因为你没有结果来进行检查。

您可以检索匹配的第一个或与匹配的所有内容的集合:

->is('admin')

答案 3 :(得分:-1)

如其他答案中所述,where()返回查询构建器,而where() - > get()返回Collection。然后,您可以返回从Collection调用的rirst()。

$user = User::where('id', 1)->get()->first();
$isAdmin = $user->is('admin');