@Blumfontein

Глобальные фильтры в Propel ORM

Начал изучать эту ORM, и она мне показалось очень вкусной. Но вот возник вопрос: можно ли как-то с помощью Propel реализовать механизм глобальных фильтров. Поясню на примере.

Допустим, я делаю некий SaaS. У меня есть с десяток моделей, у каждой из которых есть поле company_id, очевидно, показывающее принадлежность к компании. Таким образом мне в каждом запросе необходимо писать дополнительное условие filterByCompanyId($id), так же в каждом INSERT надо подставлять отдельно ID компании.

Было бы очень круто, если можно было бы 1 раз где-нибудь в базовом контроллере прописать условие, что-то типа $propel->globalFilterByCompanyId($id), затем это условие автоматически добавляется в каждый запрос для моделей, которые содержат поле company_id (причем не только в запросы типа SELECT, но и DELETE, UPDATE, INSERT).

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

Если Propel такое не умеет, было бы интересно узнать, умеют ли такое другие ORM, потому как я не встречал такого нигде.
  • Вопрос задан
  • 2640 просмотров
Пригласить эксперта
Ответы на вопрос 2
jakulov
@jakulov
Не знаю на счет Propel.
Я обычно использую Doctrine и там есть Repository и ObjectManager
В них с помощью наследования нетрудно переопределить стандартные методы, и дописать в них необходимые условия.
Ответ написан
vollossy
@vollossy
Веб-разработчик с небольшим опытом работы
Подобного метода, насколько мне известно, в Propel нет. И, как мне кажется, вот почему. То, о чем Вы говорите, это не совсем уровень ORM, это уже бизнес-логика и разработчики просто не могут предсказать все варианты использования своего инструмента.
Да и в конце-концов, Вы можете просто настроить связи в модели Company и делать выборку по связанным полям(с dml уже не так просто будет)
Ответ написан
Ваш ответ на вопрос

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

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