考虑这段代码
$match_get1 = Model::where(SyncVariableConstant::MAIN_ID_FIELD_NAME, $sqlId)->get();
我真的不明白 Model :: 类上下文中 where 静态方法的定义在哪里。模型类没有实现方法 where (source)。
显然,我认为这是一种我不熟悉的php机制......
sommeone有解释吗?
提前致谢
答案 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()