Kohana ORM - 我该怎么做?

时间:2009-09-03 03:51:39

标签: php mysql orm activerecord kohana

在我认为我今天试试之前从未与ORM合作过,我遇到了我不知道如何解决的第一个问题(由于我不了解ORM是如何工作的。)< / p>

假设我有三个表:语言,代码和数据透视表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有点经过深思熟虑,但是文档似乎缺乏,我无法找到如何做我需要的。

任何指导都会很棒。感谢。

3 个答案:

答案 0 :(得分:1)

免责声明:我从未使用过Kohana的ORM,但是从阅读the documentation开始,您似乎需要这样的内容:

ORM::factory('languages')->orderby('time_posted', 'DESC')->find_all(5);

您可以在ORM对象上使用几乎所有Kohana的query builder methods orderbyjoin等来执行更复杂的查询。

(至于PHP的ORM,Doctrine和它一样好。它应该{@ 3}}和Kohana,或任何其他框架。)

答案 1 :(得分:0)

Kohana中的ORM仅在您遵循以下条件时才有效:

  1. 表格名称必须为复数(如“语言”,您已经完成);
  2. 该表必须具有自动增量的ID(必需);
  3. 您必须创建一个扩展ORM类的模型(这个不是复数形式,'语言'),如:

    class Language_Model扩展ORM {}

  4. 您可以按照kohana的文档在上面的课程中发布一些其他参数。

答案 2 :(得分:0)

试试这个:

$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几周了。