Есть следующие объекты: Zone
, ZoneRecord
ZoneRecord
есть метод validate()
проверить против всех других ZoneRecord
из связанных Zone
,
Теперь я хочу проверить / подтвердить каждый ZoneRecord
(те, которые уже сохранены плюс те, которые добавлены Zone->addRecord(ZoneRecord)
во время выполнения), который связан с Zone
если Zone
спасается
Прямо сейчас у меня есть PreFlush
Lifecyclecallback ZoneRecord->validate
где я запускаю this->getZone->getRecords()
: этот метод дает мне только уже сохраненные объекты, которые находятся в БД.
Как я могу получить ВСЕ связанные объекты Zone
(сохраненный из БД и динамически добавленный)?
Надеюсь, мой вопрос достаточно ясен ..
Проблема, кажется, во внутренней доктрине.
я использую 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()
они используются в качестве разных коллекций, пока не будут сброшены и загружены.
Счастливого Рождества 🙂
Других решений пока нет …