вторник, 11 мая 2010 г.

Странное поведение query builder-а Kohana

Не перестаю удивляться всяким мелочам и неприятностям из Kohana PHP 5 Framework. Я сравнительно недавно на него перешёл, до того использовал в основном CodeIgniter. Как известно, Кохана зародилась как форк от CodeIgniter, из-за недостаточно быстрого развития и исправления ошибок в CI. Вокруг Kohana образовалось своё новое, мощное, комьюнити, которое все время единогласно твердит что наш framework лучше чем CI, меньше ошибок, более оптимизированный, быстрый… но не так это всё, на практике, увы.
Я всё больше и больше разочаровываюсь в их документации, в отсутствии обратной совместимости от версии к версии в большинстве модулей. Это из того, что я уже могу с уверенностью сказать, после полутора месяцев её использования. Думаю, что ситуация исправится в ближайшее время в лучшую сторону, но главное чтобы у этого фреймворка были свои сторонники и не разбегались уже приобретённые.
Яркий пример, который я только что поймал, на ровном месте – это использование метода update() из query builder. Использовал такую вот нехитрую конструкцию:

$db->update("news", Array('status'=>0));

Куда уже проще запрос?! – Необходимо поставить всем элементам таблицы News статус равный 0. Но Кохана завалилась, с ошибкой:

> ttm/system/libraries/drivers/Database/Mysql.php [392]:
There was an SQL error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 - UPDATE `news` SET `status` = 0 WHERE


Понятное дело, но зачем where сюда приплели, если даже нет условия? Мне нужно сделать Update для всех элементов таблицы.
Решение тут, конечно, простое – использовать условие-пустышку, но неприятный осадок всё-таки остался:

$db->where('status', 1)->update("news", $data);

Я использую не самую свежую версию KOHANA_VERSION = 2.3.2, но не думаю что ситуация сильно поменялась в следующих. Боюсь обновляться, чтобы проект не завалился где-то в другом месте на финишной стадии разработки =)

2 комментария:

  1. ну так в UPDATE нужно указать для WHERE условие - вот оно и ругнулось, в доке ж написан пример:
    $status = $db->update('news', array('status' => 1), array('id > ' => 0));
    я не то чтоб оправдываю - мне б тоже хотелось чтоб оно работало и с:
    $db->update("news", Array('status'=>0));
    и само догадывалось, но видно пока еще не дошли до этого руки разработчиков.

    ОтветитьУдалить
  2. to K:
    странно, что в документации не сказано, что этот параметр обязателен в query builder-е. Я, например, действовал по аналогии с остальными запросами, если мне условие не нужно - я его могу не указывать, тогда тот же select будет выполняться без ограничений. Так почему для update такое исключение, где логика?
    Мне кажется, это банальное упущение в коде и сырость framework-а Kohana.

    ОтветитьУдалить

Рекоммендую

Попробуйте надёжный хостинг от Scala Hosting