所以我们都知道Kohana 3的文档绝对可怕。那么如何构建以下查询,我有“玩家”和“龙”模型?
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会在查询结束时使事情变得非常低效,以便使代码更容易编码。这是真的吗?
答案 0 :(得分:6)
ORM可以产生一些不太理想的查询 - 但它也可以加快开发时间并为您提供抽象(有些人觉得他们不应该再手工编写SQL了。)
大多数时候,我更喜欢复杂的Web应用程序中的SQL。
然而,在说,你想要的是使用Kohana 3的ORM。
where('field', 'IN', range(1, 3));
这具有不具有循环的优点。 : - )