Скажем, у меня есть таблицы A, B в классах сущностей MySQL и Doctrine с одинаковыми именами. Эти объекты управляются Doctrine и в основном создаются в соответствии с документами Symfony/Doctrine.Доступ к другим объектам при создании объекта Doctrine
Теперь я хочу создать сущность C со столбцами: x, y. Всякий раз, когда этот объект создан или обновлен, я хочу, чтобы установить значение столбцов:
- х: SELECT COUNT (*) из А, где (некоторое условие)
- у: выберите сумму (у) из В, где (другое условие)
- тянуть некоторые другие данные из A или B и сохранить его в качестве значения столбца для C.
Я хочу сделать это в PHP, а не использовать MySQL триггеры. Я не могу добиться изнутри классов Entity, потому что у них нет доступа к диспетчеру сущностей. Я не хочу делать это в контроллере, так как я хочу, чтобы операции вставки/обновления были стандартизованы, и мне нужно будет делать это с нескольких контроллеров, и я вообще не думаю, что контроллер - хорошее место для логики, например это.
Так что нужен какой-то класс, который управляет сущности C.
Мой вопрос: Как я могу назвать этот менеджер класс и где я могу разместить его в Symfony? Я уверен, что это обычная потребность в Symfony (для доступа к нескольким объектам при создании другого объекта), но я не знаю, как это называется, и если с ними существует стандартная практика.
использование DirectInjection компонент (DI), чтобы создать * сервис * - ввести doctrine.entitymanager услугу в он и доступ ко всем репозиториям по мере необходимости. – craigh
Вы имели в виду Dependency Injection? Честно говоря, у меня есть чувство, что сущности субъекта не знают о менеджере сущности по причине. – Karolis
Возможно, вам нужен слушатель доктрины: http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/events.html#lifecycle-events. Просто знайте, что это может быть немного сложной задачей. держите подобные вещи в синхронизации. Только отправляйтесь по этому маршруту, если вам действительно кажется, что вы не можете рассчитать необходимую информацию на лету. – Cerad