2013-03-23 5 views
0

У меня есть два объекта (заметим, что несоответствующие методы и свойства опущены):Doctrine2 PostPersist: обновление соответствующей сущности

/** 
* @Entity 
*/ 
class Manager { 

    /** 
    * @Column(type="integer") 
    */ 
    private $referencesCount; 

    /** 
    * @OneToMany(targetEntity="Reference", mappedBy="manager") 
    */ 
    private $references; 

    public functions increaseReferenceCount() { 
     $this->referencesCount++; 
    } 

    // other properties and methods 
} 


/** 
* @Entity 
* @HasLifecycleCallbacks 
*/ 
class Reference { 

    /** 
    * @ManyToOne(targetEntity="Manager", inversedBy="references") 
    * @JoinColumn(nullable=false) 
    */ 
    private $manager; 

    /** 
    * @PostPersist 
    */ 
    public function updateManagerReferenceCount() { 
     $this->manager->increaseReferenceCount() 
    } 

    // other properties and methods 
} 

менеджер может иметь много ссылок. Одна ссылка относится именно к одному менеджеру. Моя модель должна быть оптимизирована для запросов, поэтому, чтобы избежать дорогостоящих объединений (у менеджера есть гораздо больше ассоциаций), я добавляю к свойству Model Model $ referenceCount, которое, как вы догадались, содержит числа его ссылок. После сохранения новой ссылки необходимо увеличить значение $ referenceCount. Но сейчас это не так. Что мне не хватает? (Я уже устал остроумие каскад = { "все"}, но это не работает для меня)

+0

Возможно, вы забыли сохранить сущность менеджера после изменения его собственности, не так ли? – lazyhammer

+0

Возможно, типо? '@ HasLifecycleCallbacs' vs' @ HasLifecycleCallbacks' – Crisp

+0

@Crisp - нет, это не опечатка :) – biera

ответ

2

Вы должны добавить Transitive persistence

cascade={"all"}

к Reference лица (не только для Manager).

И заменить @PostPersist на @PrePersist.

+0

Я добавил Cascade = {«all»} в ManyToOne в Reference и OneToMany в Менеджере - он не работает, как я ожидал. – biera

+0

Попробуйте заменить '@ PostPersist' на' @ PrePersist'. – Athlan

+0

Работает как шарм :) спасибо! – biera

Смежные вопросы