App\Models\User::find () 来自哪里?

想请教一下,

App\Models\User::find (1)->email_verified;

find()方法是继承自 Illuminate\Foundation\Auth\User 这个类里么?
可是我并没有在User这个类里找到。
请问find() 方法来自哪呢?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
leo
最佳答案

App\Models\User 继承哪个类自己看下代码不就知道了?

5年前 评论
讨论数量: 8
leo

App\Models\User 继承哪个类自己看下代码不就知道了?

5年前 评论

@leo 就是没找到才问的啊
我在Illuminate\Foundation\Auth\User 和Illuminate\Notifications\Notifiable 这两个类里没看到
Illuminate\Foundation\Auth\User 在源码里继承自Illuminate\Database\Eloquent\Model, 可我也没找到find()这个方法。
所以请问下,这个find()究竟是从哪里继承来的。
谢谢先

5年前 评论
leo

Illuminate\Database\Eloquent\Model 类里面定义 __call 魔术方法

5年前 评论

@leo 不懂啊 能具体解释一下吗

5年前 评论
leo

@等车的猪 那就先熟读 PHP 文档,在没掌握 PHP 基础之前不要妄想探究框架原理

5年前 评论

@leo 大神 跟着你学到了很多。。。确实流弊

5年前 评论

@leo 谢谢 看了下_call的用法 , 似乎弄懂了

file这句到了querybuilder builder中有这个方法vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php
@westwoods

5年前 评论

@等车的猪 这段是比较绕,我理解是这样:

public function __call($method, $parameters)
    {
        if (in_array($method, ['increment', 'decrement'])) {
            return $this->$method(...$parameters);
        }
        return $this->newQuery()->$method(...$parameters);
    }

这里newQuery()尝试执行

public function newQuery()
    {
        return $this->registerGlobalScopes($this->newQueryWithoutScopes());
    }

newQueryWithoutScopes() 使用 newModelQuery()创建一个 Eloquent Builder 类 instance ,registerGlobalScopes($builder)创建并返回一个带 scope 的 Eloquent Builder 类的 instance. 里面包含 $method 变量的function (也就是 find()).
这里请教下@leo

  1. 在5.5版本__call魔术方法创建 Eloquent Builder 用 Global Scope 进行了区分。这里registerGlobalScopes($builder)是为范围查询把当前 User 的 scope 范围复制给 find 命令么?
  2. public function newQueryWithoutScopes()
    {
    return $this->newModelQuery()
      ->with($this->with)
      ->withCount($this->withCount);
    }

    这里 withCount() 这个 function 在 Eloquent Builder 里也找不到,请问这个是计数的么?它也是用 __call 这个魔术方法执行的么?

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!