簡體   English   中英

typo3 flow isDirty在模型上

[英]typo3 flow isDirty on model

我試圖找出實體的哪些屬性已更改。 據我所知,有一個PersistenceSession帶有一種方法來檢查對象是否為isDirty屬性。 但是它總是正確的,因為它從不注冊舊對象。

因此,如果我從QuickGuide中獲取演示並覆蓋CoffeeBeanRepository中的update方法:

/**
 * @param \Acme\Demo\Domain\Model\CoffeeBean $coffeeBean
 */
public function update($coffeeBean) {
    \TYPO3\Flow\var_dump($this->persistenceSession->isDirty($coffeeBean, 'name'), "name changed before");
    parent::update($coffeeBean);
    \TYPO3\Flow\var_dump($this->persistenceSession->isDirty($coffeeBean, 'name'), "name changed after");
}

...盡管我沒有做任何更改,但它始終都是TRUE。

任何人都有想法/參考如何實現? 我將其用於REST API,其中用戶無法更新多個字段,並且在編輯某些字段時必須執行其他操作。

persistenceSession是Flow通用持久化后端的一部分,除非您顯式停用該理論,否則既不會維護它,也不會真正使用它。 因此,persistenceSession將無濟於事,因為您注意到,所有實體對於persistenceSession都是新的。

使用該學說時,您需要從“ UnitOfWork”中獲取實體變更集,可以從注入的\\ Doctrine \\ Common \\ Persistence \\ ObjectManager中獲得該變更集。 另請參閱是否有內置方法來獲取Doctrine 2實體中的所有已更改/更新的字段

但是,這是次優的解決方案,並且充其量是一個棘手的解決方法。 如果您需要跟蹤對實體的更改,則它應該是域模型的明確組成部分。 例如,當給定值與當前值不同時,讓設置員記錄更改后的屬性列表。 完成后,您甚至可以通過以下方式優化教義更改跟蹤: http : //doctrine-orm.readthedocs.org/en/latest/reference/change-tracking-policies.html#notify

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM