laravel facade如何同时使用DB和DB instance?
How laravel facade can use DB and DB instance at the same time?
我使用 DB facade。我看到它可以在 Illuminate\Database\DatabaseManager 中的 DB::connection 和 Illuminate\Database\Connection 中的 DB::select 中使用。
不明白一个门面怎么可以套两个服务?
感谢您的提问!
一个 Facade 可以针对不同的方法指向多个 classes。这可以通过魔术方法 __call.
这是 DatabaseManager
class 的 __call
方法:
/**
* 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);
}
DB
外观指向 DatabaseManager
class,如果未找到该方法,DatabaseManager
则将调用转发给 Connection
class.
我使用 DB facade。我看到它可以在 Illuminate\Database\DatabaseManager 中的 DB::connection 和 Illuminate\Database\Connection 中的 DB::select 中使用。
不明白一个门面怎么可以套两个服务?
感谢您的提问!
一个 Facade 可以针对不同的方法指向多个 classes。这可以通过魔术方法 __call.
这是 DatabaseManager
class 的 __call
方法:
/**
* 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);
}
DB
外观指向 DatabaseManager
class,如果未找到该方法,DatabaseManager
则将调用转发给 Connection
class.