Doctrine 2中的类型映射DBAL
我只为我的项目使用了Doctrine的DBAL部分。所以我必须自己关心地图。我发现Doctrine将数据库类型重新映射为一个通用的PHP类型,您可以在这里阅读[1]。Doctrine 2中的类型映射DBAL
现在我发现Doctrine将DB类型TinyInt(4)映射为布尔值。根据MySQL手册,只有TinyInt(1)相当于布尔[2]。由于我的项目是一个我喜欢从mysqli转到Doctrine的遗留项目,因此我需要坚持原生的数据库类型。
我现在的问题是如何从原则中获得本机数据库类型?
在此先感谢您的帮助。
斯特凡诺
[1] http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html [2] http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html
我运行结束了在原则问题跟踪报告,找出原因主义作品那样。答案很简单:
TinyInt的长度没有说明可以存储的值的大小。它在任何情况下都是1字节,但是如果你使用这个选项作为你的字段,它会影响填充零。
Doctrine将他自己的布尔类型映射到mysql tinyint类型,因为MySQL不提供自己的布尔类型。
欲了解更多信息,你可以阅读更多的门票:
嗨,你有没有找到解决这个问题的方法?我太移植一些遗留数据库,并希望在不做任何修改的情况下使用它(现在) –
对于那些谁映射传统的MySQL数据库,以我发现学说常见问题解决方案,易于使用打交道时错过TINYINT(4)
TL; DR
变化default: '1'
在字段映射到
is_active:
type: boolean
options:
default: true
nullable: true
龙版
我在传统DB以下数据库结构,请注意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
我结束了差异而
ALTER TABLE foo_table CHANGE is_active is_active TINYINT(1) DEFAULT NULL;
我不能做任何修改现有的DB(但即使这样做并没有解决问题,我仍然得到这个差异)
阳明映射有以下字段定义
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)
是否假定您正在使用ORM,对吗?我没有想到如何仅使用Doctrine的DBAL组件来使用YAML配置文件。 –
您是否可以从当前数据库获取映射并创建实体? (使用php doctrine orm:convert-mapping --from-database yml/path/to/mapping-path-converted-to-yml)http://docs.doctrine-project.org/en/latest/reference/tools。 html#reverse-engineering –
我现在不使用ORM,只有Doctrine的DBAL组件。我发现Doctrine将每一个tinyint(不论其长度)映射为布尔值。到目前为止,我无法弄清楚为什么。 –