2009-09-03 3 views
1

Никогда не работая с ORM, прежде чем я подумал, что сегодня попробую попробовать, я столкнулся с первой проблемой, о которой я не знаю, как ее решить (из-за того, что я не понимаю, как работает ORM).Kohana ORM - Как я могу это сделать?

Скажем, у меня есть три таблицы: Языки, коды и сводная таблица Codes_Languages. Все они имеют правильно определенные отношения в моделях.

Теперь, чтобы повторить все имена языков, я мог бы так:

$languages = ORM::factory('languages')->find_all(); 
foreach ($languages as $language) 
{ 
    echo $language->name, '<br />'; 
} 

Если я хочу, чтобы повторить все имена кодов в пределах конкретного языка, я мог бы так:

Но как насчет того, нужно ли мне это сделать: получить последние пять кодов (упорядоченных по DESC на code.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; 
    } 
} 

Я разместил вопросительные знаки вокруг некоторого псевдокода, который, я думаю, объясняет, что я пытаюсь сделать. Недавно я преобразовал из CodeIngiter, потому что я думаю, что Kohana немного более продумано, однако документы выглядят недостаточными, и я не мог понять, как делать то, что мне нужно.

Любое руководство будет замечательным. Благодарю.

ответ

1

Отказ от ответственности: Я никогда не использовал ORM Kohana, но от чтения the documentation, кажется, что вам нужно что-то вроде этого:

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

Вы можете использовать почти все Кохана-х query builder methods как orderby, join и т.д. на объекте ORM для выполнения более сложных запросов.

(Насколько ORMs для PHP идти, Doctrine примерно так же хорошо, как он получает. Это должно integrate nicely с Кохана, или любой другой структуры по этому вопросу.)

0

ORM в Kohana только работает, если вы будете следовать этому условия:

  1. Имя таблицы должно быть во множественном числе (например, «языки», которые вы уже сделали);
  2. Таблица должна иметь идентификатор с автоматическим приращением (обязательно);
  3. Вы должны создать модель, которая расширяет ОРМ класс (этот не во множественном числе, «язык»), как:

    класс Language_Model расширяет ОРМ {}

вы можете последний пост некоторые дополнительные параметры для класса выше, следуя документации коханы.

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

Я не проверял, но он должен работать; Я использую ORM Коханы в течение нескольких недель.

Смежные вопросы