2013-03-23 62 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 
} 

經理可以有很多參考。一份參考文獻完全屬於一名經理。我的模型應該針對查詢進行優化,所以爲了避免昂貴的連接(管理員有更多的關聯),我添加到Manager模型$ referencesCount屬性中,您猜對了它,它保存了引用的數量。在新引用持久之後,應該增加$ referencesCount。但現在不是。我錯過了什麼? (我已經厭倦了機智級聯= { 「所有」},但它不爲我工作)

+0

也許你忘了在更改屬性後忘記堅持經理實體,是嗎? – lazyhammer 2013-03-23 14:24:45

+0

錯別字? '@ H​​asLifecycleCallbacs' vs'@ HasLifecycleCallbacks' – Crisp 2013-03-23 15:18:28

+0

@Crisp - 不,這不是一個錯字:) – biera 2013-03-23 17:14:11

回答

2

您應該添加Transitive persistence

cascade={"all"}

Reference實體(不僅爲Manager)。

並將@PostPersist替換爲@PrePersist

+0

我在引用中的ManyToOne和管理器中的OneToMany中添加了Cascade = {「all」} - 它沒有像我期望的那樣工作。 – biera 2013-03-23 17:13:40

+0

嘗試將'@ PostPersist'替換爲'@ PrePersist'。 – Athlan 2013-03-23 17:25:06

+0

工程就像一個魅力:)謝謝! – biera 2013-03-23 17:31:19