PHP - Doctrine ORM не может правильно обрабатывать битовые (1) типы?

ОБНОВЛЕНИЕ Я сообщил об ошибке в Doctrine по поводу этого http://www.doctrine-project.org/jira/browse/DC-400

У меня есть следующая схема Doctrine:

---
TestTable:
    columns:
        bitty: bit(1)

Я создал базу данных и таблицу для этого. Затем у меня есть следующий код PHP:

$obj1 = new TestTable();
$obj1['bitty'] = b'0';
$obj1->save();

$obj2 = new TestTable();
$obj2['bitty'] = 0;
$obj2->save();

Ясно, что моя попытка состоит в том, чтобы сохранить битовое значение 0 в столбце bitty.

Однако после запуска этого PHP-кода я получаю следующие странные результаты:

mysql> select * from test_table;
+----+-------+
| id | bitty |
+----+-------+
|  1 |      | 
|  2 |      | 
+----+-------+
2 rows in set (0.00 sec)

mysql> select * from test_table where bitty = 1;
+----+-------+
| id | bitty |
+----+-------+
|  1 |      | 
|  2 |      | 
+---+-------+
2 rows in set (0.00 sec)

mysql> select * from test_table where bitty = 0;                
Empty set (0.00 sec)

Эти поля представляют собой символ 0x01, т.е. Doctrine установила значение 1, а не 0.

Однако я могу вставить 0 в эту таблицу прямо из MySQL:

mysql> insert into test_table values (4, b'0');
Query OK, 1 row affected (0.00 sec)

mysql> select * from test_table where bitty = 0;
+----+-------+
| id | bitty |
+----+-------+
|  4 |       | 
+----+-------+
1 row in set (0.00 sec)

Что происходит? Это ошибка в доктрине?


person Rory    schedule 05.01.2010    source источник


Ответы (2)


В документации по доктрине нет ничего, что говорило бы о том, что Bit является допустимым типом.

person MindStalker    schedule 05.01.2010

Doctrine знает битовый тип — по крайней мере, если вы используете MySQL и генерируете модели Doctrine из существующих таблиц. Я попытался прочитать несколько битовых столбцов и вывести полученные объекты. В основном возвращаемое битовое значение равно \0 или \1, а не 0 и 1, как я ожидал.

person Karman Kertesz    schedule 12.04.2010