@runprogr

Как работает магия в Laravel?

В Laravel есть методы Model::find() , Model::where() , которые так же работают как $model->find(), $model->where().

Если зайти в исходники Eloquent и забить в поиск find() - https://github.com/illuminate/database/search?q=fi... , то можно увидеть что такой метод есть в классе Query/Builder и Eloquent/Collection. В самом классе модели https://github.com/illuminate/database/blob/2edbe3... , так же как и во всех трейтах, которые в нее включены таких методов нет.

А раз методов нет, значит срабатывает метод
public static function __callStatic($method, $parameters)
{
        return (new static)->$method(...$parameters);
}

За ним срабатывает
public function __call($method, $parameters)
    {
        if (in_array($method, ['increment', 'decrement'])) {
            return $this->$method(...$parameters);
        }

        if ($resolver = (static::$relationResolvers[get_class($this)][$method] ?? null)) {
            return $resolver($this);
        }

        return $this->forwardCallTo($this->newQuery(), $method, $parameters);
    }


И дальше судя по всему как то создается экземпляр Query/Builder и уже в нем вызываются методы ? В каком месте кода это происходит ?
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
Alex_Wells
@Alex_Wells
PHP/TS/Kotlin developer
return $this->forwardCallTo($this->newQuery(), $method, $parameters);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
как то создается экземпляр Query/Builder и уже в нем вызываются методы ? В каком месте кода это происходит ?
(new static)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы