Проблема с ActiveRecord при переходе на версию 1.1.4

Возникла проблема СActiveRecord при переходе на версию 1.1.4. Вот пример:

Есть модель Category для следующей таблицы:




CREATE TABLE `Category` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `categoryId` int(10) unsigned DEFAULT NULL,

  `name` varchar(32) NOT NULL,

  PRIMARY KEY (`id`),

  KEY `categoryId` (`categoryId`),

  CONSTRAINT FOREIGN KEY (`categoryId`) REFERENCES `Category` (`id`) ON DELETE CASCADE

)



Правила проверок:




public function rules()

{

   return array(

     array('name', 'required'),

     array('id, categoryId', 'length', 'max'=>10),

     array('categoryId', 'exist', 'attributeName' => 'id'),

     array('name', 'length', 'max'=>32)

   );

}



Тоесть, есть категории в которых могут быть категории. В случае если категория не вложена в другую категорию, то поле categoryId у нас NULL.

Раньше, если из формы при создании новой категории передаволось поле categoryId в виде пустой строки, Yii понимал что это поле в базе будет NULL (не знаю как это было реализованно), но теперь он пытается сохранить его как есть, в виде пустой строки. MySQL пустую строку преобразовывает в 0 и я получаю ошибку "Integrity constraint violation"…

Что это? Если баг, дождусь исправления… Если так и должно работать, то буду кодить проверку на пустую строку и заметять ее на NULL.

Вроде всегда так работало. Даже расширение в YiiExt есть на эту тему: http://code.google.com/p/yiiext/downloads/detail?name=ensureNull_1.0.1.zip

Насколько я понял ты это расширение туда и добавил :), но вчера, специально проверял, на версии 1.1.3 и 1.1.2, увы так работало всегда. Вдруг перестали работать коды написанные полгода назад, которые активно использовались на протяжении всего этого времени.

Да, и добавил уже очень давно.

Может я что не так делал?..

Но даже если сгенерировать CRUD с помощью Gii, для выше указанной таблицы, при создании новой категории, без указания родительской категории выкидывается исключение.

Разница в том, что у вас раньше были поля DEFAULT NULL, а сейчас NOT NULL.

Это?!


`categoryId` int(10) unsigned DEFAULT NULL

Тема закрыта.

Issue 1564: AR Treats NULL values as empty strings

In 1.1.4, we changed the PHP type of unsigned int column to be string, in order not to lose precision. Because of this, you will need to manually concert empty string into null before you save to DB now.