Hi Miro,
what are your findings? I encountered your question when I noticed that
lifecycle-events (postLoad, etc) seem not to be supported for Embeddables.
Can somebody confirm this?
Cheers,
Menno
On Friday, 24 April 2015 11:27:02 UTC+2, Miroslav Braun wrote:
>
> Hello,
>
>
> I've run into some trouble while trying to use "NOTIFY" change tracking
> policy with embedded entities.. It seems that embedded entities do not
> receive 'propertyChanged' listeners thus their changed value is never
> persisted to database.
> Example:
>
>
> /**
> * @\Doctrine\ORM\Mapping\Embeddable()
> * @\Doctrine\ORM\Mapping\ChangeTrackingPolicy("NOTIFY")
> */
> class Status implements \Doctrine\Common\NotifyPropertyChanged
> {
> /**
> * @var \Doctrine\Common\PropertyChangedListener[]
> */
> protected $listeners = [];
>
> // ... class properties
>
> protected $code;
>
> public function addPropertyChangedListener(\Doctrine\Common\
> PropertyChangedListener $listener)
> {
> $this->listeners[] = $listener;
> }
>
> public function setCode($code)
> {
> if ($this->code !== $code) {
> // notify
> foreach ($this->listeners as $listener) {
> $listener->propertyChanged($this, 'code', $this->code,
> $code);
> }
> // set value
> $this->code = $code;
> }
> }
>
> // ... getters, setters
> }
>
>
> /**
> * @\Doctrine\ORM\Mapping\Entity()
> * @\Doctrine\ORM\Mapping\ChangeTrackingPolicy("NOTIFY")
> */
> class Match implements \Doctrine\Common\NotifyPropertyChanged
> {
> protected $listeners = [];
>
> /**
> * @\Doctrine\ORM\Mapping\Embedded(class="Status")
> */
> protected $status;
>
> public function addPropertyChangedListener(\Doctrine\Common\
> PropertyChangedListener $listener)
> {
> $this->listeners[] = $listener;
> }
>
> public function getStatus(){
> return $this->status;
> }
>
> // ... getters, setter
> }
>
>
> /** @var Match $match */
> $match = $matchRepository->findOneBy(/* ..some condition.. */);
> $match->getStatus()->setCode(22);
>
> $manager->flush(); // no change
>
>
> Was this intended or it's a bug ?
>
> I've tried to pull a workaround for this by forwarding listeners to
> embedded object from its parent on postLoad life cycle event, but even
> though listeners get called there are still no changes to the database..
>
> Any help is highly appreciated :)
>
>
> Best regards,
> Miro
>
>
--
You received this message because you are subscribed to the Google Groups
"doctrine-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/doctrine-user.
For more options, visit https://groups.google.com/d/optout.