在laravel中访问查询,我们使用DB外观
DB::select()
来自alanstorm网站http://alanstorm.com/binding_objects_as_laravel_services我了解到DB外观使用callstatic方法导致DB::app['db']->select().
app是laravel服务容器对象,所有服务绑定到它中。我使用vardump php方法var_dump(app['db'])
,我看到服务容器返回一个Illuminate \ Database \ DatabaseManager对象。从实现 ConnectionResolverInterface 的 DatabaseManager 类中,我看不到那里定义的select方法。我想问一下app [' db']如何访问select方法。
答案 0 :(得分:1)
DatabaseManager
类实现了__call()
方法
如果你在该类上调用一个不存在的方法,它会立即作为参数传递给__call()
,这是php的魔法之一methods。
使用您传递的方法调用连接类。
这里是Illuminate \ Database \ DatabaseManager
中的方法实现/**
* Dynamically pass methods to the default connection.
*
* @param string $method
* @param array $parameters
* @return mixed
*/
public function __call($method, $parameters)
{
return $this->connection()->$method(...$parameters);
}