在Doctrine2中級聯「刷新」意味着什麼?它是實體更新操作嗎?在學說2中級聯「刷新」意味着什麼?
UPDATE
現在看來,如果,例如,類別名稱被更改,所有相關產品將被獲取並更新。但是,由於通常實體通過id關聯,因此沒有意義獲取所有產品,因爲在子表中沒有任何更新。 由於這個原因,我認爲「刷新」是MySQL的「ON UPDATE CASCADE」的模擬 - 如果父主鍵被改變,子值也會改變以反映這一點。所以學說的「刷新」操作只在ORM級別是一樣的。只有當我們更新父母身份時纔有意義,對嗎?
在Doctrine2中級聯「刷新」意味着什麼?它是實體更新操作嗎?在學說2中級聯「刷新」意味着什麼?
UPDATE
現在看來,如果,例如,類別名稱被更改,所有相關產品將被獲取並更新。但是,由於通常實體通過id關聯,因此沒有意義獲取所有產品,因爲在子表中沒有任何更新。 由於這個原因,我認爲「刷新」是MySQL的「ON UPDATE CASCADE」的模擬 - 如果父主鍵被改變,子值也會改變以反映這一點。所以學說的「刷新」操作只在ORM級別是一樣的。只有當我們更新父母身份時纔有意義,對嗎?
您可以找到的文檔here,但總結我會複製一些重要的一點:
的堅持,刪除,分離,清爽合併個人 實體可以成爲相當繁瑣,特別是當高度 交織涉及對象圖。因此,Doctrine 2通過級聯這些 操作提供了用於傳遞持久性的 機制。每個與另一個實體的關聯或實體的集合都可以配置爲自動級聯某些操作。默認情況下,沒有操作級聯。
下級聯選項有:
- 堅持:堅持級聯到相關實體的操作。
- 刪除:級聯將操作移除到關聯的實體。
- 合併:級聯合並操作到關聯的實體。
- 分離:級聯分離對相關實體的操作。
- 刷新:級聯刷新操作到關聯的實體。
複製所有的部分是不必要的,因爲每個人都可以打開該鏈接,但級聯的想法是從該部分清晰。
根據原則對關聯進行一些自動操作。
在refresh cascade
情況下,當您在@oneToMany
協會定義了這個級聯,你問學說刷新collection
在許多方面,當你在一邊做refresh
。
可以說我們有one-to-many
Category
和Product
實體之間的關聯。如果您爲此定義此級聯,則每次調用refresh
時,將會刷新它的Products Collection
。
關於這部分的問題:它是實體更新操作嗎?是的,在Refresh
它意味着從數據源獲取集合和實體到內存中。
級聯操作在內存中執行。這意味着集合和 相關實體會被提取到內存中,即使在級聯操作將要執行時它們仍然標記爲懶惰。 但是,這種方法允許對這些操作中的每一個執行實體生命週期事件 。
但是,級聯中將對象圖拉入內存可能會導致相當大的性能開銷,尤其是級聯 集合較大時。確保衡量您定義的每個級聯操作的優點和缺點 。
謝謝你的回答!但是,你能提供一個更新的「刷新」用法的具體例子嗎?請檢查我的答案更新。 – Molarro
看起來這個問題更多的是關於$ entity-> refresh()操作的含義。 – Arkemlar