確定原則2 實體中的變更欄位
在原則2 中,管理實體欄位的變更對於確保資料完整性至關重要。為了解決這個問題,開發人員經常需要確定實體中的哪些欄位已被修改。雖然可以選擇手動實現,但探索 Doctrine 的內建功能可以簡化此過程。
使用 EntityManager 檢索更改的欄位
Doctrine 提供了 EntityManager,可透過 $em 訪問,它提供了一種檢索更改欄位的有效方法。透過使用 getUnitOfWork 方法,您可以存取 DoctrineORMUnitOfWork,在下面的程式碼片段中指定為 $uow。
$entity = $em->find('My\Entity', 1); $uow = $em->getUnitOfWork();
更改集的計算和檢索
到計算更改集(代表已更改的欄位)會觸發 $uow 上的computeChangeSets 方法。如果您位於偵聽器內,則此計算是可選的。隨後,使用getEntityChangeSet($entity) 檢索特定於您的實體的更改集:
$uow->computeChangeSets(); $changeset = $uow->getEntityChangeSet($entity);
透過利用getEntityChangeSet 方法,您可以存取包含鍵值對的數組,其中鍵代表更改的欄位名稱, values 代表修改後的值。
關鍵注意事項
使用此方法時在 preUpdate 偵聽器中,避免重新計算變更集,因為 Doctrine 已經執行了此任務。相反,只需執行 getEntityChangeSet 即可取得更新的欄位。
注意事項
應避免在 Doctrine 事件監聽器之外使用此解決方案,因為它可能會破壞 Doctrine 的常規行為。因此,這種方法最適合事件偵聽器中的特定場景。
以上是如何有效地確定 Dotrine 2 實體中的哪些欄位已被修改?的詳細內容。更多資訊請關注PHP中文網其他相關文章!