Прочитанные объекты сохраняются, но еще не очищены доктриной

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

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

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

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

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

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

В plumeOptions у меня есть паттерн, который является FK для PhysicalPlume.

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

Правило

: Я говорю, что профиль 1 имеет physical_plume_index номер 3 (= индекс), подключенный к нему.

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

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

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

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

Ответы

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

Эффект бизнес-логики эффективен.

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

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

Если вам нужно найти только те новые созданные объекты, вы должны сделать f.e. их в переменной массива сеанса и перебирать их с помощью foreach.

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