Kohana ORM - 我该怎么做?
Posted
技术标签:
【中文标题】Kohana ORM - 我该怎么做?【英文标题】:Kohana ORM - How can I do this? 【发布时间】:2009-09-03 03:51:38 【问题描述】:在我想今天尝试一下之前从未使用过 ORM,但我遇到了我不知道如何解决的第一个问题(由于我不了解 ORM 的真正工作原理。)
假设我有三个表:Languages、Codes 和一个数据透视表 Codes_Languages。这些在模型中都有正确定义的关系。
现在,为了呼应所有语言的名称,我可以这样:
$languages = ORM::factory('languages')->find_all();
foreach ($languages as $language)
echo $language->name, '<br />';
如果我想回显特定语言中的所有代码名称,我可以这样:
$language = ORM::factory('languages', 1);
foreach ($language->codes as $code)
echo $code->title, ' ', $code->description;
但如果我需要这样做:检索每种语言的最新五个代码(按 code.time_posted 上的 DESC 排序)?
$languages = ORM::factory('languages')->find_all();
???$languages->codes = ORM->order_by('time_posted', 'desc')->limit(5);???
foreach ($languages as $language)
echo $language->name, '<br />';
foreach ($language->codes as $code)
echo $code->name, ' ', $code->description;
我在一些伪代码周围放置了问号,我认为这些伪代码可以解释我正在尝试做的事情。我最近从 CodeIngiter 转换过来,因为我认为 Kohana 是经过深思熟虑的,但是文档似乎缺乏,我不知道如何做我需要的。
任何指导都会很棒。谢谢。
【问题讨论】:
【参考方案1】:免责声明:我从未使用过 Kohana 的 ORM,但从阅读 the documentation 来看,您似乎需要这样的东西:
ORM::factory('languages')->orderby('time_posted', 'DESC')->find_all(5);
您可以在 ORM 对象上使用几乎所有 Kohana 的 query builder methods,例如 orderby
、join
等来执行更复杂的查询。
(就 php 的 ORM 而言,Doctrine 已经达到了最好的水平。它应该 integrate nicely 与 Kohana 或任何其他框架一起使用。)
【讨论】:
【参考方案2】:Kohana 中的 ORM 仅在您遵循以下条件时才有效:
-
表名必须是复数形式(如“语言”,您已经完成了);
表必须有一个自动递增的 id(必需);
您必须创建一个扩展 ORM 类的模型(这个不是复数形式,“语言”),例如:
类 Language_Model 扩展 ORM
您稍后可以按照 kohana 的文档向上面的类发布一些附加参数。
【讨论】:
【参考方案3】:试试这个:
$languages = ORM::factory('languages')->find_all();
foreach ($languages as $language)
echo $language->name, '<br />';
foreach ($language->order_by('time_posted', 'desc')->limit(5)->codes as $code)
echo $code->name, ' ', $code->description;
我还没有测试过,但它应该可以工作;我已经使用 Kohana 的 ORM 几个星期了。
【讨论】:
以上是关于Kohana ORM - 我该怎么做?的主要内容,如果未能解决你的问题,请参考以下文章