2010-11-14 93 views
4

所以我們都知道Kohana 3的文檔是非常可怕的。那麼如何構建下面的查詢,我有一個「玩家」和「龍」模型?Kohana 3 ORM:高級查詢,效率

SELECT * FROM `dragons` JOIN `players` ON (`dragons`.`player_id` = `players`.`player_id`) WHERE `uid` IN (1,2,3) ORDER BY `dragons`.`id` ASC 

我可以使用ORM::factory('dragon')->join("players")->on("dragons.player_id", "=", "players.player_id")去連接的一部分,但我不能做in條款。 Kohana 3的ORM中沒有in函數。我嘗試了where函數,但它引用了第三個參數的引號,所以我的ID列表變成了一個字符串,查詢變得無效。那麼我能做什麼?我無法弄清楚如何將自定義位的SQL添加到我的ORM加載查詢中。再次,因爲文檔不存在。

我現在能想到的唯一方法就是加載所有合適的玩家,循環並取回他們的龍。但是,這看起來真的很愚蠢 - 比沒有必要的方式更多的查詢。我之前有這樣的感覺,使用ORM在查詢結束時會讓事情變得非常低效,以便讓代碼更容易一些。這是真的?

回答

6

ORM可以產生一些不太令人滿意的查詢 - 但它也加快了開發時間併爲您提供了抽象(有些人認爲他們不應該再用手寫SQL了)。

大多數情況下,我更喜歡複雜Web應用程序中的SQL。

然而,在說,你想要的是可能使用Kohana 3的ORM。


The Pixel Developer

where('field', 'IN', range(1, 3)); 

這具有沒有循環的優點。 :-)

+0

@The Pixel開發人員:是的,這是可能的 – zerkms 2010-11-15 00:05:18

+1

@The像素開發人員你把我平庸的答案變成了一個很好的答案 - 謝謝! – alex 2010-11-15 00:07:19

+1

沒問題alex。對於3條線不太值得自己回答,因爲你已經完成了大部分工作,所以我認爲最好是改進你的:) – 2010-11-15 00:11:26