Доктрина 2 получить связанные сущности в PreFlush

Есть следующие объекты: Zone, ZoneRecord

ZoneRecord есть метод validate() проверить против всех других ZoneRecordиз связанных Zone,

Теперь я хочу проверить / подтвердить каждый ZoneRecord (те, которые уже сохранены плюс те, которые добавлены Zone->addRecord(ZoneRecord) во время выполнения), который связан с Zone если Zone спасается

Прямо сейчас у меня есть PreFlush Lifecyclecallback ZoneRecord->validate где я запускаю this->getZone->getRecords(): этот метод дает мне только уже сохраненные объекты, которые находятся в БД.

Как я могу получить ВСЕ связанные объекты Zone (сохраненный из БД и динамически добавленный)?

Надеюсь, мой вопрос достаточно ясен ..

1

Решение

Проблема, кажется, во внутренней доктрине.
я использую InheritanceType «JOINED».

Аннотация в Zone похоже:

/**
* @var ZoneRecord[]
* @ORM\OneToMany(targetEntity="Application\Entity\ZoneRecord", mappedBy="zone", cascade={"all"}, orphanRemoval=true)
*/
protected $records;

/**
* @var ZoneRecordA[]
* @ORM\OneToMany(targetEntity="Application\Entity\ZoneRecordA", mappedBy="zone", cascade={"all"}, orphanRemoval=true)
*/
protected $recordsa;

Аннотация от ZoneRecord:

/**
* @ORM\Entity
* @ORM\Table(name="zonerecords")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap({
*  "A" = "Application\Entity\ZoneRecordA"* })
* @ORM\HasLifecycleCallbacks
*/
abstract class ZoneRecord

Аннотация от ZoneRecordA:

/**
*
* @ORM\Entity
* @ORM\Table(name="zonerecords_a")
*
*/
class ZoneRecordA extends ZoneRecord

Если я добавлю или удалю ZoneRecord от Zone с помощью Zone->addRecordA(ZoneRecord) / Zone->removeRecordA(ZoneRecord) он будет удален только из protected $recordsa; стек. protected $records; будет не тронут, пока объект не будет успешно очищен и перезагружен.

Кажется, что Доктрина внутреннее отличается между ZoneRecord а также ZoneRecordA хотя они помечены как присоединившиеся и ZoneRecordA продолжается ZoneRecord,

Это особенно проблема, если вы хотите удалить записи — сейчас я использую оба метода удаления (Zone->removeRecord(ZoneRecordA) а также Zone->removeRecordA(ZoneRecordA)) чтобы убедиться, что сущность удалена из EntityManager.

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

Счастливого Рождества 🙂

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]