Laravel 5.x - Как могла бы быть модель Eloquent QueryBuilder? - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь понять, как модель Eloquent также может быть построителем запросов.Я не видел полиморфных отношений между Illuminate\Database\Eloquent\Model class и Illuminate\Database\Query\Builder class в исходном коде.Между этими двумя классами нет наследования или реализации интерфейса.

Итак, кто-нибудь может объяснить, как Laravel позволил красноречивой модели быть построителем запросов?Заранее спасибо.

Редактировать: я задаю этот вопрос, потому что я не понимаю, как я могу вызывать методы класса Builder через мои модели, например, ModelObject::orderBy('created_at', 'asc')->get(), где orderBy () - это методв Builder классе.

1 Ответ

0 голосов
/ 13 мая 2018

В базовой модели Eloquent есть функция query(), которая создает при вызове новый экземпляр построителя запросов (при этом таблица модели уже задана для построителя). Вы можете найти функцию здесь .

Кроме того, магические функции __call() и __callStatic() создают новый построитель запросов и делегируют вызов метода этому построителю всякий раз, когда вызывается функция, которая не является частью модели Eloquent и которой у них нет неявный вызов для (например, increment(), decrement()). Вы можете найти код для этого здесь .

Итак, подведем итог: это волшебство. Волшебные функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...