主义2 +无符号值

Krz*_*zos 65 php doctrine-orm

是否可以unsigned integer在Doctrine 2中指定列类型?

yvo*_*yer 120

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

在文档(我已经看到)中没有地方可以谈论这个,但它有效.

更新

在Yaml中定义(主键为2.4)

id:
  type: integer
  options:
    unsigned: true
Run Code Online (Sandbox Code Playgroud)

  • 这将使用SQLite失败,因为它只支持有符号整数. (5认同)
  • @hardik喜欢:`options:{unsigned:true}`? (2认同)

gre*_*emo 18

你可以,但你会失去便携性.使用columnDefinition属性并将其设置为integer unsigned.实际代码取决于您使用的是什么.

columnDefinition:在列名后面开始并指定完整(非可移植!)列定义的DDL SQL片段.此属性允许使用高级RMDBS功能.但是,您应该仔细使用此功能及其后果.如果使用"columnDefinition",SchemaTool将不再正确检测列的更改.

  • 在ORM中丢失可移植性是不可接受的.设置为十进制,精度为0. (4认同)

Har*_*ood 13

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

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

这里查看关于原因的完整说明.[编辑](链接不起作用)我已粘贴下面的文章.它总是由我写的;)

无符号数字这么大你的大脑会爆炸!w/Doctrine 2

ORM有一个固有的问题.你如何只采用一些数据类型的RDBMS支持并允许你使用它.当谈到Doctrine 2和无符号数字时,他们有点懒惰.

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

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

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

columnDefinition:在列名后面开始并指定完整(非可移植!)列定义的DDL SQL片段.此属性允许使用高级RMDBS功能.但是,您应该仔细使用此功能及其后果.如果使用"columnDefinition",SchemaTool将不再正确检测列的更改.基本上,此功能允许您将不受支持的内容释放到列定义中.在技​​术上使未签名的号码得到联合支持!更不用说我的开发和QA部署系统严重依赖SchemaTool.我们可以感谢Doctrine和sqlite3的懒惰开发人员组合这个疯狂城镇的小块.

这立即促成了谷歌搜索.如果我不需要,我不想.我找到了什么?每个人都在使用varchars.VARCHAR处理!?!?我有心脏病发作.那是不可接受的.

因此输入十进制.这是完美的.存储大小是可变的,它以二进制形式存储,因此索引速度非常快.我们只需将小数精度设置为零即可.ORM可以将其移植到任何RDBMS,它足够大,我们不关心不受支持的签名/未签名问题,而且速度很快.十进制(20,0)应该处理我们的facebook大小十八分之四四十四亿六千四百四十四万亿七十三十亿七千九百五十五百五十一数千六百一十五相当不错.

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


Fla*_*orm 9

Doctrine 1文档Doctrine 2文档说你可以通过以下方式实现:

PHP注释:

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

Yaml :( 见文档)

MyEntity:
  fields:
    someField:
      type: integer
      column: some_field
      options:
        unsigned: true
Run Code Online (Sandbox Code Playgroud)

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