Вызов where
на светловолосая модель включает в себя немного волшебства, которое происходит за кулисами. Во-первых, рассмотрим пример:
User::where(’name’, ‘Joe’)->first;
Там нет статического where
метод, который существует на Model
класс, который расширяет класс User
.
Что происходит, это то, что вызван метод магии PHP __callStatic
, который затем пытается вызвать метод where
.
public static function __callStatic($method, $parameters)
{
$instance = new static;
return call_user_func_array([$instance, $method], $parameters);
}
Как нет четко определены функции пользователя с именем where
, следующий магический метод PHP __call
который определен в Model
выполняется.
методы
public function __call($method, $parameters)
{
if (in_array($method, ['increment', 'decrement'])) {
return call_user_func_array([$this, $method], $parameters);
}
$query = $this->newQuery();
return call_user_func_array([$query, $method], $parameters);
}
связанных с общей базой данных становится доступной через:
$query = $this->newQuery();
Это создает новый объект Красноречивого конструктора запросов, и это на данном объекте, что метод where
работает.
Таким образом, когда вы используете `` `User :: где()` `вы на самом деле с помощью:
Illuminate\Database\Eloquent\Builder::where()
Посмотрите на Builder class, чтобы увидеть все общие красноречивые методы, которые вы используется для использования, как where()
, get()
, first()
, update()
и т.д.
Laracasts имеет большой (платный) видео углубленного о том, как Eloquent работает за кулисами, которые я рекомендую.
Ответ: [магические методы] (http://www.php.net/manual/en/language.oop5.magic.php), в частности '__callStatic()' и '__call()' –