列在我目前的應用程序中,我有一個戲劇列表,它幾乎普遍按查詢中的戲劇名稱排序。目前,它僅僅使用DB::select()
語句來構建,但是當我們進行大量重構時,我們想要開始使用Kohana的ORM庫。問題來自於這樣的事實:我們通常不按實際播放名稱進行排序,而是根據處理後的版本進行排序,刪除文章等並按此排序(以便「摩門教之書」與Bs出現,而不是TS)。我不知道如何將它轉化爲ORM模型定義。Kohana 3.2 ORM與基於DB :: expr()
的選擇代碼如下(有刪節):
DB::select(column, column,
DB::expr("CASE WHEN SUBSTRING_INDEX(show_name, ' ', 1) IN ('a', 'an', 'the')
THEN SUBSTRING(show_name, INSTR(show_name, ' ') + 1)
ELSE show_name
END AS show_name_sort")
有沒有一種方法來創建一個假show_name_sort列的Kohana將忽略保存,但我可以在order_by
呼叫仍然使用?或者,我是否需要創建一個實際列,其中包含名稱的排序版本?
聽起來很有希望。我可以同時刪除完整的列查詢,從而減少一些無關的數據庫查詢。 ;)那麼如何將'DB :: expr()'調用傳遞給最初加載模型的查詢呢?或者這只是當我在實際表中有一個排序列時? – monksp 2012-04-20 16:00:18
我不太明白你的意思,「我該如何將DB :: expr()調用傳遞給最初加載模型的查詢」。您的查詢應該保持完全一樣,但是您可以使用新的列進行排序。 – matino 2012-04-20 18:52:20
我最初想做的事情是在加載orm模型的查詢中將原始問題包含在case語句中,而不是使用具有可排序名稱的額外列。 – monksp 2012-04-22 16:50:21