Laravel, лучшее место / наименование для запросов, связанных с несколькими таблицами БД

Я работаю над приложением Laravel со многими моделями Eloquent. Эти красноречивые модели (например, «Пользователь», «Почта» и т. Д.) Также содержат множество запросов, которые только слабо связаны с моделью (часто необработанные sql).

Некоторые запросы похожи на «получить мне некоторую информацию из одной таблицы, некоторые из другой и немного информации из третьей таблицы». Теперь такие модели, как модель User, могут иметь много методов, таких как getAllUncompletedActionsForUser или же getSessionsDurationsPerUser, Я думаю, это нехорошо, если красноречивая модель будет иметь тысячи строк кода.

Что бы вы выбрали для разделения этих моделей, где бы вы разместили и как бы вы назвали классы, которые возвращают результаты базы данных, которые имеют дело со многими различными таблицами?

0

Решение

Добро пожаловать в узкое место активная запись шаблон. Вот почему так много людей называют это анти-паттерном.

Вместо того, чтобы пытаться сжать больше функциональности в том же классе, вы должны начать перемещать только-туманно, связанные с логика настойчивости в автономном режиме картографы данных.

Вроде как:

$user = App\Entity\User::find($id);

$mapper = new App\Mapper\UserActions($dbConnection);
$mapper->fetchIncompleted($users);

var_dump($user->getActions(App\Entity\User::ACTION_INCOMPLTE));

Конечно, вы, вероятно, захотите использовать IoC (если возможно) для внедрения этих картографов в данный сервис, вместо того, чтобы использовать new оператор в каком-то случайном месте.

2

Другие решения

Рассматривали ли вы использование Черты?

Если бы это было до меня, я бы создал папку App/Traits и есть, например, UserActions черта, которая имеет getAllUncompletedActionsForUser() функция.

Черта UserActions может использоваться в любом подходящем классе / модели.

0

По вопросам рекламы [email protected]