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

想请教一下,

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

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

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
leo
最佳答案

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

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

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

7年前 评论

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

7年前 评论
leo

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

7年前 评论

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

6年前 评论
leo

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

6年前 评论

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

6年前 评论

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

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

6年前 评论

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

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 这个魔术方法执行的么?

6年前 评论

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