Опять же не пойму зачем что-то везде менять, если в современных IDE, если вам очень захотелось поменять название метода/класса, есть рефакторинг автоматический =/
И не вьезжаю, зачем что-то менять по проекту после, цитирую, "написания обновленной модели"? Чем инжект и (new User)->newQuery()->whatever() отличается от User::whatever() с этой стороны? Что там что там скоуп whatever IDE, понятное дело, не сможет отрефакторить, и я не вижу какие преимущества это вам дает.
Не пойму о каких методах вы говорите. Об квери методах? Нет, они в квери-билдере eloquent'овском. Скоупы? Их так-же как-то либо моделька, либо квери-билдер вызывает. Релейшены? Другие методы, которые именно к реальным данным привязаны? Ну тоже не имеет отношения к этому. А еще каких-то методов там не будет. И не пойму что за filterParams - это уже либо к репозиторию, либо в скоуп.
A. Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.
B. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
interface Interface{
public function filterParams($val):self;
...
}
User::with - это уже магия, staticCall вызывает, а query - существующий метод в классе.
<?php namespace Illuminate\Database\Eloquent;
abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializable, QueueableEntity, UrlRoutable
{
...
public static function with($relations)
{
return (new static)->newQuery()->with(
is_string($relations) ? func_get_args() : $relations
);
}
public static function query()
{
return (new static)->newQuery();
}
...
}
Class Repository
{
public function __construct(User $user)
{
$this->user = $user;
}
}
$app->bind(UserInterface::class, User::class);
$this->user::query();