PHP - Doctrine ORM无法正确处理位(1)类型?

时间:2010-01-05 17:55:56

标签: php mysql types doctrine

更新我已在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。

但是我可以直接从MySQL插入0表:

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)

发生了什么事?这是Doctrine中的错误吗?

2 个答案:

答案 0 :(得分:2)

在学说文档中没有任何内容表明Bit是合法类型。

答案 1 :(得分:1)

Doctrine确实知道位类型 - 至少如果你使用MySQL并从现有表中生成Doctrine模型。 我试图读取几个列并转储生成的对象。基本上返回的位值是\ 0或\ 1,而不是我期望的0和1。