Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 17.01.2018 00:06:36

Как реализовать логику репозиториев с query builder ?

Нужен совет по структуре репозиториев в ларавеле . В общем сейчас есть просто модели , допусим Category с методами примера GetAllCategories() и т.д , которые реализованы с помощью query builder , eloquent не используется . Хочу переделать свой проект на архитектуру controller-service-repository . с контроллерами и сервисами более менее понятно , а вот с репозиториями не совсем . Как они должны быть реализованы именно с quaery builder ?
Писать sql код нужно прямо в методах репозиториях ? тогда получается , что у меня все модели станут репозиториями и сущностей как таких вообще не останется . или делать еще одну ненужную абстракцию поверх модели Category ? это тоже как-то не очень разумно .

class CategoryRepository
{
    public function getAllCategories()
    {
        return Category::getAllCategories();
    }
}

Помогите разобраться

Не в сети

#2 17.01.2018 10:33:57

Re: Как реализовать логику репозиториев с query builder ?

1) Модель не должна привязываться к реализации хранения, это просто объект
2) Объект репозитория реализовывает логику хранения моделей(база, файлы, кеш и т.д.)

interface MemberRepository {
    public function save(Member $member);
    public function getAll();
    public function findById(MemberId $memberId);
}

class ArrayMemberRepository implements MemberRepository {
    private $members = [];

    public function save(Member $member) {
        $this->members[(string)$member->getId()] = $member;
    }

    public function getAll() {
        return $this->members;
    }

    public function findById(MemberId $memberId) {
        if (isset($this->members[(string)$memberId])) {
            return $this->members[(string)$memberId];
        }
    }
}

class RedisMemberRepository implements MemberRepository {
    public function save(Member $member) {
        // ...
    }
}

Не в сети

Подвал раздела