在我认为我今天试试之前从未与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有点经过深思熟虑,但是文档似乎缺乏,我无法找到如何做我需要的。
任何指导都会很棒。感谢。
答案 0 :(得分: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和它一样好。它应该{@ 3}}和Kohana,或任何其他框架。)
答案 1 :(得分:0)
Kohana中的ORM仅在您遵循以下条件时才有效:
您必须创建一个扩展ORM类的模型(这个不是复数形式,'语言'),如:
class Language_Model扩展ORM {}
您可以按照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几周了。