За чистый и ясный код!

Статьи на тему программирования под веб, используя PHP, MySQL, Jquery и многое другое

Конструирование запроса с использование JOIN в Kohana3

Январь17
Укрась свой сад с помощью разных фигурок, например с помощью фигуры рыбы.

Предстояло мне сформировать запрос с использование 2-х таблиц связанных с помощью конструкции JOIN. Беда была в том, что таблицы имели префикс (test_), который был указан в конфиге БД и к созданным алиасам, указанных таблиц, цеплялся префикс таблицы.

Ниже приведен запрос который был после использования такой конструкции:

DB::select()
                        ->from(array('context_adv_theme', 't'))
                        ->join(array('context_adv', 'a'), 'inner')
                        ->on('t.id', '=', 'a.theme_id')
                        ->where('fl', '=' ,1);
SELECT * FROM `test_context_adv_theme` AS `t`
INNER JOIN `test_context_adv` AS `a` ON (`test_t`.id = `test_a`.theme_id)
WHERE `fl` = 1

как видно в конструкции ON получалась такая запись (`test_t`.id = `test_a`.theme_id), вместо (`t`.id = `a`.theme_id)

для того, чтобы было (`t`.id = `a`.theme_id) необходимо ставить алиасы таблицы в конструкторе запроса ->ON в двойные кавычки, как это показано на нижнем примере:

DB::select()
                        ->from(array('context_adv_theme', 't'))
                        ->join(array('context_adv', 'a'), 'inner')
                        ->on('"t".id', '=', '"a".theme_id')
                        ->where('fl', '=' ,1);
SELECT * FROM `test_context_adv_theme` AS `t`
INNER JOIN `test_context_adv` AS `a` ON (`t`.id = `a`.theme_id)
WHERE `fl` = 1

В помощь тебе, юзер!!!

Статья просмотренна 40724 раз, зашло посетителей 13991

рубрика: Kohana

6 комментариев в “Конструирование запроса с использование JOIN в Kohana3”

  1. Avatar
    Андрей пишет:

    Объясните пользу использования этих не простых конструкций в пользу ручного написания запроса. Это требование фреймворка или есть реальная польза?


  2. Avatar
    Максим Нагайченко пишет:

    Конечно можно писать и в лоб, но так ты сам должен заботится об инъекциях, о названиях таблиц, например ты решил поставить префикс к таблице и тебе придется переписывать все запросы, а так меняется одна настройка и все в ажуре.
    Я знаю зенд, кодеигнитер и кохану все они имеют конструкторы запросов.

    Лучше всего использовать ОRM модель (Doctrine), там вообще запросы писать не надо, главное правильно настроить модель. Пока не использую, но хочу попробовать.


  3. Avatar
    Максим Нагайченко пишет:

    Ну хорошо, вот еще один аргумент. Как-то я писал сайтик который работал под MySQL, а часть кода работала под MsSQL. Я только перед запросом указывал какой адаптер использовать в данном случае, остальное — синтаксис под конкретную СУБД, конструктор создавал сам.

    Хоть язык описания запросов считается одинаковым для всех СУБД, но каждая как-то немного отличается. Пример отличий

    При использовании конструктора никаких проблем я не испытал.


  4. Avatar
    Михаил Крамер пишет:

    А самую большую пользу от использования конструктора запросов и не написали — ведь объект, созданный конструктором запросов можно передавать в разные функции, в разные классы, т.е. достаточно экономно создавать разные запросы в разных ситуациях. Я например только что вообще сделал, что часть кода идёт через Kohana ORM, часть — через DB, но есть функции, которые добавляют выражения where и туда и туда. С чистым SQL такое вообзе невохможно


  5. Avatar
    maxnag пишет:

    Спасибо за комментарий. Наверное каждый описывает, то с чем он работал и видать в моей практике такие решения как-то обходил. Есть желание написать об этом статью?


  6. Avatar
    Андрей пишет:

    По моему опыту, префиксы и инъекции это единственное о чем нужно заботиться, решаю для себя это вполне просто. Поэтому мне не понятно использование дополнительных конструкций.


не публикуется

пример

Оставить комментарий или два:

  

Облако тегов

cli csv dump events form Kohana locale models MySQL mysqldump orm PHP tools trigger validate газ газовый счетчик итоги кеширование переменные

Облако тегов плагина WP Cumulus для WordPress требует для просмотра Flash Player 9 или выше.

Я на твиттере!

  • у твиттера тоже бывают перерывы...

Календарь

Январь 2010
Пн Вт Ср Чт Пт Сб Вс
« Дек   Фев »
 123
45678910
11121314151617
18192021222324
25262728293031

Сейчас на сайте