2013-07-23 24 views
-1

我在Symfony中的PreUpdate LifecycleCallbacks中遇到了一些問題。PreUpdate entity symfony LifecycleCallbacks

我有一個與實體產品OneToMany關係的實體用戶。

class User{ 
    /** 
    * @ORM\OneToMany(targetEntity="Product", mappedBy="formulario", cascade={"persist", "remove"}) 
    */ 
    private $products; 
} 

class Product{ 
    /** 
    * @ORM\ManyToOne(targetEntity="User", inversedBy="products") 
    * @ORM\JoinColumn(name="user", referencedColumnName="id") 
    */ 
    private $user; 
} 

我的問題是當我從用戶添加或刪除產品。當這需要啓動PreUpdate功能來對用戶實體進行一些更改時。但是,在更改用戶的實體產品時,預更新不會觸發。

非常感謝!

+1

對實體用戶$貨號是關聯的反向側,我不知道任何生命週期回調將在產品(擁有方)被修改時在用戶上調用。您可以嘗試在產品實體 – Florent

+0

上進行回調。這樣可行!謝謝! 但是,有什麼方法可以將PreUpdate放入用戶實體嗎?在某種程度上,用戶正在改變添加產品...對於我來說,更容易和有組織地查看用戶實體中的功能。 以您的方式,我必須從預更新產品實體{$ this-> getUser() - > PreUpdateUser()}調用用戶的功能。所以我必須有兩個功能,用戶的預更新和產品的預更新(它調用預更新用戶) 任何方式,非常感謝! – Angel

+0

此外,PreRemove事件也被觸發,但它不會進行更改。 所以,如果我刪除一個產品,PreRemove函數被觸發,但代碼$ this-> getUser() - > setSomeField()不生效,所以產品從數據庫中刪除,但用戶不會更改:(這是因爲我刪除了Product對象,所以用戶的FK中的更改會丟失? – Angel

回答

2

使用preUpdate偵聽器不允許更改相關實體。

更改更新實體協會 此事件是絕不允許的,因爲原則不能保證正確處理在這一點上的刷新操作 參照完整性。

... from documentation

0

我有同樣的問題,我已經更新$用戶preUpdate()解決它,然後安排一個額外的更新:

$args->getEntityManager()->getUnitOfWork()->scheduleExtraUpdate($user, array(
     'field_name' => array($oldValue, $newValue) 
    )); 
+0

這種方法被標記爲INTERNAL,因此使用起來並不安全。 – felipsmartins

相關問題