Чтение объектов сохранялось, но еще не было заполнено доктриной - PullRequest
18 голосов
/ 24 октября 2011

Я новичок в symfony2 и доктрине.вот проблема, как видит I .я не могу использовать:

$repository = $this->getDoctrine()->getRepository('entity');
$my_object = $repository->findOneBy($index);

на объекте, который сохраняется, НО НЕ ПРОМЫВАНО !!я думаю, что getRepository читается из БД, поэтому он не найдет не очищенный объект.

мой вопрос: как прочитать те объекты, которые сохраняются (я думаю, они находятся где-то в «сеансе доктрины»), чтобы повторно-использовать их, прежде чем я очищу всю партию?

каждый профиль имеет 256 физических шлейфов.

каждому профилю назначена 1 plumeOptions запись.

In plumeOptions, у меня есть шлейф картриджа, который является FK для PhysicalPlume.

, каждый шлейф идентифицируется как ID (автоматически генерируется) и INDEX (генерируется пользователем).

правило: я говорю, что к профилю 1 подключено physical_plume_index число 3 (= индекс).

Теперь я хочу скопировать профиль со всеми связанными с ним данными в другой профиль.

новый профиль создан.Новые 256 шлейфов создаются и копируются из старого профиля.

я хочу связать новый профиль с новым индексом шлейфа 3.

отметьте здесь: http://pastebin.com/WFa8vkt1

Ответы [ 3 ]

13 голосов
/ 24 октября 2011

Думаю, вы захотите взглянуть на эту функцию:

$entityManager->getUnitOfWork()->getScheduledEntityInsertions()

Возвращает вам список объектов, которые еще существуют.

Хм, я не очень хорошо прочитал ваш вопрос, с помощью вышеприведенного вы получите полный список (в виде массива), но вы не можете запросить его, как с getRepository. Я постараюсь найти что-то для тебя ..

3 голосов
/ 24 октября 2011

Я думаю, вы могли бы взглянуть на проблему с неправильной точки зрения. Doctrine - это ваш уровень персистентности и уровень доступа к базе данных. Ваша доменная модель отвечает за предоставление доступа к объектам, когда они находятся в памяти. Таким образом, проблема сводится к how do you get a reference to an object without the persistance layer?

Где вы создаете объект, который вам нужно получить позже? Может ли метод / служба, создающая объект, вернуть ссылку на контроллер, чтобы он мог распространить ее в другое место, где он вам нужен? Можете ли вы отправить событие, которое вы слушаете, в другом месте вашего приложения, чтобы получить объект?

По моему мнению, Doctrine следует использовать при запуске приложения (как можно раньше), для инициализации модели домена и при завершении работы приложения, чтобы сохранить любые изменения в модели домена во время запроса. Использование репозитория для захвата объектов в середине запроса - это, на мой взгляд, запах кода, и вы должны посмотреть, как можно реорганизовать поток приложения, чтобы устранить эту потребность.

0 голосов
/ 13 июля 2012

Вы - проблема бизнес-логики.

Запрос вниз по базе данных запроса find для объекта, который еще не очищен, означает гораздо больший объем запросов к объекту уровня базы данных, который уже есть в вашей области действия функции.

Также имейте в виду, что findOneBy будет извлекать также другие объекты, ранее сохраненные с теми же функциями.

Если вам нужно найти только среди этих новых созданных объектов, вы должны сделать их в массиве сеансов.Переменная и итерации их с foreach.

Если вам нужно сочетание уже сохраненных элементов + несколько новых элементов, вам следует угрожать двум частям по отдельности, одна с foreach, другая с запросом к репозиторию!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...