2010-11-14 1 views
4

Итак, мы все знаем, что документация для Kohana 3 абсолютно ужасна. Итак, как я могу построить следующий запрос, где у меня есть модель «Player» и «Dragon»?Kohana 3 ORM: расширенные запросы, эффективность

SELECT * FROM `dragons` JOIN `players` ON (`dragons`.`player_id` = `players`.`player_id`) WHERE `uid` IN (1,2,3) ORDER BY `dragons`.`id` ASC 

я могу использовать ORM::factory('dragon')->join("players")->on("dragons.player_id", "=", "players.player_id"), чтобы добраться до присоединиться к части, но я не могу сделать оговорку in. В ORM Kohana 3 нет функции in. Я попробовал функцию where, но он помещает кавычки вокруг третьего параметра, поэтому мой список идентификаторов становится строкой, и запрос становится недействительным. Так что я могу сделать? Я не могу понять, как добавить пользовательские биты SQL в мои запросы загрузки ORM. Опять же, поскольку документация не существует.

Единственный способ, с которым я могу сейчас подумать, - это просто загрузить всех соответствующих игроков, пройти через них и забрать их драконов. Но это кажется действительно глупым - больше запросов, чем необходимо. Раньше я чувствовал себя так, что использование ORM делает вещи ужасно неэффективными в конце запроса, чтобы сделать его немного легче кодировать. Это правда?

ответ

6

ORM может производить несколько менее желательных запросов, но также ускоряет время разработки и дает вам абстракцию (некоторые считают, что им больше не придется писать SQL вручную).

Большую часть времени я предпочитаю SQL в сложных веб-приложениях.

Однако, говоря, что вы хотите, можно использовать ORM Kohana 3.


От The Pixel Developer.

where('field', 'IN', range(1, 3)); 

Это имеет то преимущество, что не имеет петли. :-)

+0

@ The Pixel Developer: да, возможно – zerkms

+1

@ The Pixel Developer Вы превратили мой посредственный ответ в хороший - спасибо! – alex

+1

Без проблем alex. На самом деле не стоит собственный ответ на 3 строки, и поскольку вы уже сделали большую часть работы, я подумал, что было бы лучше улучшить ваши :) –