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,例如 orderbyjoin 等来执行更复杂的查询。

(就 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 - 我该怎么做?的主要内容,如果未能解决你的问题,请参考以下文章

Kohana-v3 ORM 父关系

Kohana:授权 ORM

Kohana 3.1 都有哪些可用的 ORM 解决方案?

Kohana 3 ORM:构造函数“加载后”

Kohana 3 ORM 关系问题

如何在 Kohana 中使用 ORM 连接表