Kohana 3 ORM:高级查询,效率
问题描述:
所以我们都知道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在查询结束时会让事情变得非常低效,以便让代码更容易一些。这是真的?
答
ORM可以产生一些不太令人满意的查询 - 但它也加快了开发时间并为您提供了抽象(有些人认为他们不应该再用手写SQL了)。
大多数情况下,我更喜欢复杂Web应用程序中的SQL。
然而,在说,你想要的是可能使用Kohana 3的ORM。
where('field', 'IN', range(1, 3));
这具有没有循环的优点。 :-)
@The Pixel开发人员:是的,这是可能的 – zerkms 2010-11-15 00:05:18
@The像素开发人员你把我平庸的答案变成了一个很好的答案 - 谢谢! – alex 2010-11-15 00:07:19
没问题alex。对于3条线不太值得自己回答,因为你已经完成了大部分工作,所以我认为最好是改进你的:) – 2010-11-15 00:11:26