簡體   English   中英

在Doctrine_Query中使用虛擬字段

[英]Using virtual fields in Doctrine_Query

有沒有辦法將基於虛擬字段的邏輯插入到Doctrine_Query中?

我在我的模型中定義了一個虛擬字段“getStatus()”,我最終希望在Doctrine_Query的Where子句中使用它。

...
->AndWhere('x.status = ?',$status);

但是,“status”不是表中的列,而是由模型中的業務邏輯計算的。

在執行查詢后過濾集合在某些情況下有效,但在混合中拋出Doctrine_Pager時不會,因為它在您訪問集合之前計算它的偏移等。

在修改Doctrine_Collection之后,我最好放棄Doctrine_Pager並重建該功能嗎?

如果您可以在SQL中執行此操作,則可以在Doctrine中執行此操作。 所有的學說都在研究你將它放入DQL解析器的內容,無論是字符串還是值,然后將其轉換為SQL,然后從結果中保存對象。

你不能使用Doctrine_Pager來尋找非查詢對象,但你可以使用sfPager並將Doctrine_Collection的結果作為數組傳遞給它嗎? 在最壞的情況下,您可以將查詢結果傳遞給查詢,減去查詢中的任何限制,並讓它處理分頁,但這實在是效率低下。

像普通的舊PHP一樣編寫尋呼機“舊skool”可能會更快。

我真的不知道你用什么業務邏輯來計算狀態,但是如果它不是實時的(如每個請求計算的那樣),我會在保存時計算它(使用Doctrine Record Listener或只是一個preSave) / preInsert掛鈎在模型中)並將其存儲在表中,或者設置symfony任務以定期刷新它並將其作為cronjob運行。 這樣你就可以在Doctrine中查詢它,並將性能提升為附帶優勢。

或者,如果status取決於相關對象的狀態,則可以在其上放置一個事件觸發器,以便在修改父對象時更新其狀態。 沒有更多背景,很難推薦最佳方法。 :)

暫無
暫無

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

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