lexand
(Dorogikh Alexander)
January 8, 2012, 6:25pm
1
вообщем наткнулся на такое бредовое с моей точки зрения поведение фреймворка
багрепорт пока не написал, бо забыл на работе посмотреть ревизию (но точно не древняя)
суть бреда
если создать таблицу в MySQL с полем типа
aaa INT(10) UNSIGNED NOT NULL
то Yii создаст модель с таким описанием
/**
* ....
* @property string $aaa
*/
class Test exetends CActiveRecord
{
....
public function rules()
{
array('aaa', 'length', 'max'=>10)
....
}
}
вот теперь вопрос какого!!! такое происходит для положительных чисел
почему тип поля строка и почему не создаеться правило
array('aaa', 'numerical', 'integerOnly'=>true, 'min'=>0)
завтра гляну еще разок и пошлю тогда багрепорт
ЗЫ.
увидел я конечно это после выполнения команды шел
но так побырику прошерстив код фреймворка - класс БД схем не правильно определяет тип колонки таблици
lexand
(Dorogikh Alexander)
January 10, 2012, 8:10am
2
что сказать…
Qiang ответили что положительный 32битные значение могут неправильно обрабатываться PHP
но интерпретировать число как строку да еще и с правилом проверки длинны это ИМХО не правильно.
Причем это правило одианоков пропустит
как "4294967297" так и "9999999999" так и любую строку длинной в 10 символов - результат будет еще более не предсказуемый.
Положительные TINYINT, SMALLINT, MEDIUMINT - обрабатываються правильно.
Но даже
INT(9) UNSIGNED - который полностью помещаеться в 32 бита и не вызовет проблем при работе
все равно интерпритируеться как строка.
Более того Yii не проверяет PHP_INT_SIZE, потому что если бы проверял то было бы видно что на 64битных платформах INT UNSIGNED вообще не вызвал бы никаких проблем.
вообщем я не знаю как это делаеться в Google Code (имеюю ввиду как проголосовать за изменения)
но кому не нравиться такое поведение отпишитесь в
http://code.google.com/p/yii/issues/detail?id=3085