使用Eloquent Model类。静态方法“where”的实现在哪里?

时间:2016-10-20 08:20:24

标签: php laravel eloquent laravel-5.3

考虑这段代码

$match_get1 = Model::where(SyncVariableConstant::MAIN_ID_FIELD_NAME, $sqlId)->get();

我真的不明白 Model :: 类上下文中 where 静态方法的定义在哪里。模型类没有实现方法 where source)。

显然,我认为这是一种我不熟悉的php机制......

sommeone有解释吗?

提前致谢

2 个答案:

答案 0 :(得分:0)

“魔法”实际上发生在__callStatic中的魔术方法__call()Model.php内。

如果在课程中找不到某个方法,很可能是由这些魔术方法处理的。

如果您将dd($method);放在__call()内,您将获得where

来自PHP doc

  在对象上下文中调用不可访问的方法时会触发

__ call()。

答案 1 :(得分:0)

模型通常扩展Eloquent外观,这只是底层app('db')实例的快捷方式。

您要查找的where()方法位于\Illuminate\Database\Query\Builder命名空间中。此命名空间由Eloquent ORM使用,其代码位于\Illuminate\Database\Eloquent\Builder命名空间内。这两个类都有where()个方法。如果检查后一个类,您将看到在它的构造函数中它将前一个类作为依赖项(即依赖注入)注入。

简而言之,\Illuminate\Database\Eloquent\Builder\Illuminate\Database\Query\Builder的高级用户,两者都已实施where()

如何调用高级\Illuminate\Database\Eloquent\Builder?正如另一位用户已经说过的那样,通过魔法吸气器__call()