2016-08-18 3 views
0

Мне нужно реализовать класс PendingMessage для хранения уведомлений для некоторых объектов приложения Symfony2. Иногда создается уведомление для одного объекта, а иногда и для другого (существует много объектов).Symfony общая связь с сущностью в Doctrine

Есть ли способ сделать отношение ORM в этом классе PendingMessage для хранения одного объекта, но не определенного типа объекта, а всего общего объекта (класса), чтобы иметь атрибут, называемый «$ destination», который должен быть тип сущности.

Должен ли я реализовать интерфейс? Любая помощь приветствуется!

ответ

1

Вы можете добавить 2 параметра к своему объекту PendingMessage, один entityName, другой entityID.

С этими параметрами, вы можете получить доступ к хранилищу в контроллере, как

$em = $this->getDoctrine()->getManager(); 
$pendingMessage = $this->getRepository('youBundle:PendingMessage')->find(1234); 
$targetEntity = $this->getRepository('yourBundle:'.$pendingMessage->getEntityName())->find($pendingMessage->getEntityID()); 

Если вы хотите сделать ту же операцию с этим PendingMessage для всех возможных сущностей, я бы написать интерфейс, который будет использоваться по каждому репозиторию, который вы будете использовать, для этого гарантируется, что эта функция предоставляется в каждом репозитории, который вы получите динамически.

Если это не то, что вы ищете, уточните свой вопрос.

+0

Да, я думаю, что это то, что я ищу ... но я не знаю, как реализовать этот ... интерфейс с этими двумя параметрами? – jmunozco

1

Вы можете добавить поле в объект PendingMessage, в котором вы сохраните сериализованный объект, для которого было создано это сообщение.

Тогда, если Вы хотели бы изменить этот конкретный объект, Вы хотите сделать что-то вроде:

$pendingMessage = $this->getRepository('Bundle:PendingMessage')->find(1); 
$detachedEntity = $pendingMessage->getDestination(); 
$entity = $em->merge($detachedEntity); 
$entity->anyChangesYouWant(); 
+0

Как сохранить этот сериализованный объект? – jmunozco

+0

как текст :) найдите его в google. Существует много примеров. – mmmm

Смежные вопросы