对于那些将遗留 mysql db 映射到学说的人,我找到了处理 TINYINT(4) 时容易错过的常见问题的解决方案
TL;博士
default: '1'
字段映射更改为
is_active:
type: boolean
options:
default: true
nullable: true
长版
我在遗留数据库中有以下数据库结构,请注意列中的tinyint(4)is_active
CREATE TABLE IF NOT EXISTS `foo_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
...
`is_active` tinyint(4) DEFAULT '1',
...
运行以下命令后
php app/console doctrine:mapping:import --force AcmeDemoBundle yml
php app/console doctrine:generate:entities AcmeDemoBundle
然后在运行时php app/console doctrine:schema:update --dump-sql
我最终得到了 diff 而
ALTER TABLE foo_table CHANGE is_active is_active TINYINT(1) DEFAULT NULL;
我无法对现有数据库进行任何修改(但即使这样做也没有解决问题,我仍然得到这个差异)
yml 映射具有以下字段定义
is_active:
type: boolean
nullable: true
default: '1'
column: is_active
我试过了
is_active:
columnDefinition: "TINYINT(4)"
nullable: true
default: '1'
column: is_active
没有成功,然后在编程中遵循非常普遍的规则“如果你真的对代码没有任何问题,那么问题就出在其他地方”我找到了解决方案
解决方案
is_active:
type: boolean
options:
default: true
nullable: true
现在,即使简单地使用type: boolean
它也能正确识别 tinyint(4)