Корочка
->join() сделай и все. Почитай документацию по DQL
Konstantin
Konstantin
поле тайп лишнее
Konstantin
нет, поле лишнее, если задуматься
Konstantin
если непустое ads_id - это картинка для объявления, если непустое category_id - это категории
Evgeniy
Konstantin
чтобы не было ситуации когда одна картинка на две связи ссылается - можно check() в ddl написать
Konstantin
Evgeniy
Konstantin
о том и речь, ситуация шаблонная, вы ее на ровном месте усложнили. при этом готов поспорить, что целостность базы дополнительную вы не гарантировали
Юра
Короче пропиши просто нормально все рилейшены включая inverse side.
Konstantin
Юра
И получитсч у тебя
select c,i,a from category c join c.image as i join i.ads as a
Evgeniy
Evgeniy
Всем спасибо
Alex
Konstantin
Konstantin
быстрее подебажить что происходит в ManagerRegistry::getManagerForClass
Alex
Нашел проблему
http://joxi.ru/D2P5Oa3swbX5LA
был указан type: annotation
http://joxi.ru/vAWa7kLf34EMjm
Alex
Хотя в энтити использую атрибуты
Dima
Всем привет. Разрабатываем новый продукт, вопрос по архитектуре и подходе в целом
Будет некий бесплатный функционал и возможность доставлять некоторые платные модули: бухгалтерию, трекер задач, воронку продаж, регистратуру и т.д.
Каждый заказчик будет на свое усмотрение ставить нужные ему модули
Эти модули должны быть независимыми между собой, cпокойно функционировать друг без друга
Но при этом если установлены некоторые модули одновременно — должны открываться новые фичи. К примеру, если поставлена регистратура + бухгалтерия, то должна быть возможность из регистратуры (календаря) сразу рассчитать услугу на месте (функционал бухгалтерии).
То есть, если есть функционал A и B, то должен появиться дополнительно функционал X.
Если A, B и С, то функционал Х и еще функционал Y.
Комбинаций модулей может быть большое количество и каждая комбинация дает все новые и новые фичи
__________________________________
Прошлый продукт был подобным и каждый модуль делали отдельным бандлом. В кучи местах диспатчили ивенты и в кучи местах на них подписывались.
Каждый бандл имел собственный git и отдельно писался в папке vendor. Потом через composer ставили нужные бандлы, каждый бандл подтягивал нужные ему зависимости. Данный способ был крайне неудобен (много гитов, папка src была пустая у всех)
Сейчас же в best practices симфони не рекомендует писать бандлами
В итоге у меня только 2 идеи:
1) снова бандлы + ивенты, cнова в папке vendor все писать
2) все писать в папке src, через конфиг отключать ненужный функционал
Как можно еще?
Юра
Может как система интентов в андроиде?
Юра
Хотя это похоже на ивенты
Dima
Юра
По идее набор фич должен быть известен на этапе компиляции контейнера
Юра
Значит
Юра
Должно решаться компайлер пасами
Юра
Итоговый контейнер должен уже знать набор поддерживаемых фич
Юра
Какой-то сервис сделать, у которого можно спросить поддерживается ли такаято фича
Юра
А также скажать ему компайлер пасом что такая фича поддерживаеся
Юра
Каждый бандл смотрит на присутствие других бандлов и добавляет фичи в комайлер пасе
Юра
Может еще паттерн chain of responsibility
Алексей
Плагинами и через подписчик добавлять функционал, учу симфони только
Юра
Либо симфонийский компонент workflow как-то присобачить к этому делу
Юра
Добавлять в него шаги
Юра
Мне кажется воркфлоу подходит
Юра
Плюс его можно визуализировать
Юра
А ивенты говно спагетти код
Юра
Хер пойми что откуда делает
Юра
Стараюсь их избегать
Алексей
интересно, посмотрю для себя. Работаю с площадкой для магазинов на perl, там более 100 плагинов и как раз думаю как их перенести на симфони. И модулей оплаты около 20
Dima
Юра
Короче я бы компайлер пассами настраивал воркфлоу, а дальше простл использовал бы его
Юра
Это если набор фич не зависит от настроек каких-то в рантайме
Юра
Например от каких-то флажков в БД
Dima
https://symfony.com/doc/current/components/workflow.html
этот компонент?
Юра
Да
Alexander
Привет! Можно ли как-то отключить framework: translator: на отдельных роутах, чтобы он не кидал 404, если в пути не указывать язык?
Konstantin
не соображу причем здесь транслятор. как роут задали - так он и работает. ну указывайте без {_locale}, не?
Konstantin
или там появилась какая-то магическая интеграция контроллера и переводчика, что генерит роуты сама?
Alexander
Alexander
В роутах не прописывается {_locale}
Konstantin
я знаю что такое транслятор и как он конфигурится, спасибо
Alexander
Он дальше сам язык подтягивает
Konstantin
сами по себе эти две строчки в роутер не лезут
Konstantin
я прям вот точно в этом уверен, дело в чем-то еще
Alexander
Вы правы, нашел
Alexander
В конфиге аннотаций указан префикс _locale на все контроллеры
Alexander
Спасибо!
Konstantin
у меня поэтому во всех проектах два базовых неймспейса контроллеров - локализованные и все остальные
Konstantin
первым при импорте ставится префикс, вторым - нет
Konstantin
в целом по работе с мультиязычными сайтами можно мне задавать вопросы, я уже прилично шишек в этом набрал
Alex
Привет, а кто то делал bin/console doctrine:mapping:import attribute ?
Konstantin
сколько раз ни пытался, все говно какое-то выходит :)
Alex
Не мапится с annotation нормально вроде бы
Alex
а для attribute не видит драйвера
Konstantin
можно в аннотации перегнать сначала, если так, потом ректором в атрибуты
Konstantin
если прям рилли большая база и руками долго описывать
Alex
Ну всегда же хочется найти простое решение))
Konstantin
увы, проще джуна посадить :)
Konstantin
Konstantin
если выхлоп аннотаций вас устраивает
Alex
Попробую, перегнать из аннотаций в атрибуты, помотрим что получится
Konstantin
тэгайте меня, я помогу, там быстро
Konstantin
то есть сначала генерите энтити с доктриновыми аннотациями, если там все ок, я помогу в атрибуты сконвертить
Alex
За одну команду сгенерилось
bin/console doctrine:mapping:import "App\Entity\Processing" --path=src/Entity/Processing --em=processing annotation