学说2 +无符号值

是否可以在Doctrine 2中指定unsigned integer的列types?

你可以,但你会失去可移植性。 使用columnDefinition属性并将其设置为integer unsigned 。 实际的代码取决于你正在使用的是什么。

columnDefinition:在列名后面开始的DDL SQL代码片段,它指定完整的(不可移植的)列定义。 该属性允许使用高级RMDBSfunction。 但是你应该小心使用这个function和后果。 如果使用“columnDefinition”,SchemaTool将不会正确地检测到列上的更改。

 / **
  * @ORM \ Column(name =“id”,type =“integer”,options = {“unsigned”= true})
  * /

在文档中没有地方(我见过)说这个,但它的作品。

更新

Yaml中的定义(主键为2.4)

 id: type: integer options: unsigned: true 

小数将允许这么大的数字,并允许您保留SchemaTool,只需将比例设置为0。

 <?php /** * @Column(type="decimal", precision=20, scale=0, nullable=false, unique=true) */ Protected $facebookId; 

关于为什么在这里检查一个完整的写作。 [编辑](链接不起作用)我粘贴下面的文章。 无论如何,这是我写的;)

无符号的数字这么大,你的大脑会爆炸! W /主义2

ORM有一个固有的问题。 你如何获取数据types只有一些RDBMS支持,并允许你使用它。 那么谈到第二条理论和无符号的数字,他们就有点懒惰了。

我想要做的就是存储我的64位脸书ID。 那有多难? 那么我的RDBMS是mySQL,所以我真正需要的是一个无符号的bigint。

 <?php /** * @Column(type="bigint", nullable=false, unique=true, columnDefinition="unsigned") */ Protected $facebookId; 

这看起来很花哨,直到你读到这个:

columnDefinition:在列名后面开始的DDL SQL代码片段,它指定完整的(不可移植的)列定义。 该属性允许使用高级RMDBSfunction。 但是你应该小心使用这个function和后果。 如果使用“columnDefinition”,SchemaTool将不会正确地检测到列上的更改。 基本上这个function让你把不受支持的东西放到列定义中。 技术上无符号的数字UN-SUPPORTED! 更不用说我的开发和QA部署系统在很大程度上依赖于SchemaTool。 我们可以感谢Doctrine和sqlite3的懒惰开发人员组合这个疯狂的小镇的小块。

这立即提示了谷歌search。 我不想如果我不需要。 我发现了什么? 每个人都在使用varchars。 VARCHAR处理!?!? 我有一个心脏病发作。 这是不能接受的。

从而input十进制。 这是完美的。 存储大小是可变的,它存储在二进制文件中,因此索引速度非常快。 我们只需将小数点精度设置为零就可以了。 ORM可以将其移植到任何RDBMS中,这足以让我们不用关心不支持的签名/未签名问题,而且它闪电般快速。 十进制(20,0)应该处理我们的十八万六千四百六十四万七千四百四十亿七千三百七十九万五千一千六百一十五的脸书大小相当好。

 <?php /** * @Column(type="decimal", precision=20, scale=0, nullable=false, unique=true) */ Protected $facebookId; 

Doctrine 1文档和Doctrine 2文档说你可以这样做:

PHP注释:

 /** * @Column(type="integer", name="some_field" options={"unsigned":true}) */ protected $someField; 

Yaml:( 参见文档 )

 MyEntity: fields: someField: type: integer column: some_field options: unsigned: true 

希望这有助于某人节省时间;)