2012-03-22 1 views
0

У меня есть столбец в таблице базы данных active, который должен возвращать, подтвердил ли пользователь почту или нет. Это tinyint (1), и если оно установлено 0, и я проверяю его строго против оператора FALSE, он не возвращает TRUE. Я использую ORM для связи с базой данных.Возвращаемые значения из базы данных в исходных типах данных (Kohana ORM)

Это устанавливается в базе данных MySQL:
активный TINYINT (1) Да 0

if ($user->active === FALSE) // returns FALSE 
if ($user->active === '0') // returns TRUE 

Я искал в API для решения и в классе Database был уже TINYINT тип данных.

Должен ли я использовать == вместо === или есть что-то еще, что я мог бы сделать?

+0

FALSE не идентичен 0! - http://php.net/manual/en/language.operators.comparison.php – nnichols

+0

Да, это так, когда 0 не является целым или строковым, но логическим. Это то, что я хочу сделать - я хочу вернуть значение из базы данных как BOOL, а не строку. –

+0

Не так. Кроме того, вы сказали, что возвращаете данные от TINYINT (1), а не BOOLEAN. В любом случае, MySQL не использует BOOLEAN. Это синоним TINYINT (1). – nnichols

ответ

2

Чтобы держать вещи в соответствии, отбрасывая дб данных PHP эквивалентов была удалена, так как 3,0, это означает, что вы правы - не строгое сравнение :)

Что вы можете сделать, если вы действительно хотите это перезаписать ORM::_load_values() в сочетании с ORM::list_columns() для приведения к «правильным» типам данных (то есть - если вы остаетесь с драйвером MySQL, потому что переезд в PDO приведет к поломке вещей).

+0

Hvala :) Хорошо, я собираюсь использовать свободное сравнение. Я считал это плохой практикой, но это проще, чем изменение основных файлов Kohana. –

Смежные вопросы