Kohana 3 ORM: сложные запросы, эффективность
Итак, мы все знаем, что документация для Kohana 3 абсолютно ужасна. Итак, как я могу построить следующий запрос, где у меня есть модели "Player" и "Dragon"?
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
пункт. Нет никаких in
функция в Кохана 3-х ОРМ. Я попробовал where
функция, но она помещает кавычки вокруг третьего параметра, поэтому мой список идентификаторов становится строкой, а запрос становится недействительным. Так что я могу сделать? Я не могу понять, как добавить пользовательские биты SQL в мои запросы загрузки ORM. Опять же, потому что документация не существует.
Единственный способ, о котором я могу думать прямо сейчас, - это просто загрузить всех соответствующих игроков, пройти через них и выбрать их драконов. Но это кажется действительно глупым - гораздо больше запросов, чем необходимо. Раньше я чувствовал, что использование ORM ужасно неэффективно в конце запросов, чтобы немного облегчить кодирование. Это правда?
1 ответ
ORM может выдавать несколько нежелательных запросов, но это также ускоряет время разработки и дает вам абстракцию (некоторые люди считают, что им больше не придется писать SQL вручную).
Большую часть времени я предпочитаю SQL в сложных веб-приложениях.
Однако сказать, что вы хотите, можно с помощью ORM от Kohana 3.
where('field', 'IN', range(1, 3));
Это имеет то преимущество, что не имеет петли.:-)