代码之家  ›  专栏  ›  技术社区  ›  jame

科哈娜·奥姆-我怎么做?

  •  1
  • jame  · 技术社区  · 15 年前

    我从来没有和orm合作过,直到今天我想尝试一下,我遇到了第一个我不知道如何解决的问题(因为我不了解orm是如何工作的)。

    假设我有三个表:languages、codes和pivot table 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;
    }
    

    但如果我需要这样做呢:检索每种语言中最新的五个代码(按代码上的desc.time_posted排序)?

    $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;
      }
    }
    

    我在一些伪代码周围加了问号,我想这可以解释我要做什么。我最近从codeiniter转换过来是因为我觉得kohana有点考虑周全,但是文档似乎缺乏,我无法找到如何做我需要的事情。

    任何指导都很好。谢谢。

    3 回复  |  直到 15 年前
        1
  •  1
  •   Øystein Riiser Gundersen    15 年前

    免责声明 :我从未使用过科哈纳的ORM,但从阅读 the documentation ,似乎你需要这样的东西:

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

    你几乎可以用所有科哈纳的 query builder methods 喜欢 orderby 我是说, join 等对orm对象做更复杂的查询。

    (至于php的orms, Doctrine 是最好的了。它应该 integrate nicely 与kohana或任何其他框架一起使用。)

        2
  •  0
  •   yoda    15 年前

    科哈纳的ORM只有在遵循以下条件时才能工作:

    1. 表格名称必须是复数形式(如“语言”,尽管您已经做过);
    2. 表必须有一个自动递增的id(必需);
    3. 您必须创建一个扩展orm类的模型(这个模型不是复数形式,“language”),比如:

      类语言模型扩展orm{}

    之后,您可以按照kohana的文档向上面的类发布一些附加参数。

        3
  •  0
  •   Adam Bradley    15 年前

    试试这个:

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

    推荐文章