2016-09-04 4 views
3

쿼리에 액세스 할 수 laravel, 우리는 내가 DB::app['db']->select(). 응용 프로그램으로 이어질 DB 외관 사용 callstatic 방법이있는 모든 laravel 서비스 컨테이너 개체입니다 배울Laravel 서비스 제공자와 서비스 컨테이너

DB::select() 

alanstorm 웹 사이트 http://alanstorm.com/binding_objects_as_laravel_services에서 DB의 외관을 사용 서비스가 그것에 바인딩됩니다. 나는 Vardump PHP 메서드 var_dump(app['db'])을 사용하고 서비스 컨테이너가 Illuminate \ Database \ DatabaseManager 객체를 반환하는 것을 봅니다. DatabaseManager 클래스에서 ConnectionResolverInterface 내가 거기에 정의 된 선택 방법을 참조 해달라고을 구현하는. 나는 어떻게 app [ 'db']가 select 메소드에 접근 할 수 있는지를 묻고 싶다. 당신이 그것을 즉시 PHP의 마법 methods 중 하나입니다, __call()에 인수로 전달 있어요 존재하지 않는 클래스의 메소드를 호출하는 경우 감사

+0

길고도 짧은 이야기는 결국 반환 [https://laravel.com/api/5.3/Illuminate/Database/Connection.html](https : //laravel.com/api/5.3/Illuminate/Database/Connection.html) – Ohgodwhy

+0

@Ohgodwh 질의 구문은 https://laravel.com/api/5.3/Illuminate/Database/Connection에서 가져온 것입니다. html로하지만, 설명이 필요합니다. [ 'db'] 앱의 DatabaseManager 객체가 Connection 클래스 메소드를 사용할 수있는 방법. – Jsnow

답변

1

DatabaseManager 클래스는 __call() 방법 를 구현하기 전에.

전달한 메서드로 연결 클래스를 호출합니다. 여기

에 불이 \ 데이터베이스 \의 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); 
} 
+0

선생님 덕분에 선생님 께 감사 드려요.하지만 한 번 더 질문이 있습니다. var_dump app [ 'db'] -> connection()은 mysqlconnection 객체를 반환합니다. databasemanager 클래스에는 $ name 매개 변수와의 연결 메소드가 있습니다. mysql 유형으로 databasemanager 연결 메소드를 설정하지 않은 경우 app [ 'db'] -> connection()은 mysql 유형 연결을 반환 할 수 있습니다. 만약 당신이'connection()'메소드에서 – Jsnow

+0

을 호출했다면, 이름을 전달하지 않으면 메소드는'.env' 파일이나'config/database.php' 파일에 지정된 기본 연결을 얻습니다. 이 경우 mysql type ... 소스 코드를 더 깊이 파고 이해하게 될 것입니다. – Sherif

관련 문제