В 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 и уже в нем вызываются методы ? В каком месте кода это происходит ?