[英]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.