Куда выносить логику выборки?

Подскажите, куда лучше выносить различные проверки для выборки данных? Допустим есть сайт с объявлениями и нужно получить объявления, которые разместил пользователь, а также которыми он воспользовался.. Один из вариантов, при чем самых популярных это 2 строчки в контроллере:

$selling = Ads::where('owner_id', 23);
$purchases = Ads::where('buyer_id', 23);


Но я понимаю, что это плохое решение для более менее сложных проектов, надо куда то такую логику выносить.. В модель выносить такое не хочется.. Сервис для этого делать тоже думаю как то неправильно.. Может в строну доктрина копать? Или этим должны репозитории заниматься? Вообщем подскажите, как лучше это делать..
  • Вопрос задан
  • 629 просмотров
Решения вопроса 1
@D3lphi
Вся работа с БД должна производиться в репозиториях.
Репозиторий работает с сущностями, так что, в случае использования active record ORM, из ar модели нужно будет создавать сущность и возвращать ее из репозитория. Не даем подключению к БД "гулять" по проекту. Entity это обычный popo в котором нет какой-либо логики, а есть лишь набор полей, геттеры, ну и методы для обновления состояния.

Например:
class EloquentUserRepository implements UserRepository
{
    public function findBySomething(string $something): ?UserEntity
    {
          $user = User::where('something', $something)->first();

          if ($user !== null) {
              return new UserEntity($user->id, $user->something);
          }

          return null;
    }
}


Может в строну доктрина копать?

Верное решение. Лучше откажитесь от eloquent и возьмите doctrine, если проект требует серьезной ORM.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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