在Doctrine 2中,是否可以指定无符号整数
列类型?
id:
type: integer
options:
unsigned: true
columnDefinition
属性并将其设置为integer unsigned
。实际的代码取决于您使用的内容。
Doctrine参考:https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/annotations-reference.html#columncolumnDefinition:DDL SQL片段,在列名称之后开始并指定完整(非便携!)列定义。此属性允许使用高级RMDBS功能。但是,您应谨慎使用此功能及其后果。如果使用“columnDefinition”,SchemaTool将无法正确检测列上的更改。
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
希望这能帮助某人节省时间 ;)
<?php
/**
* @Column(type="decimal", precision=20, scale=0, nullable=false, unique=true)
*/
Protected $facebookId;
无符号大数,让你的大脑爆炸!与Doctrine 2一起使用
ORM存在一个固有问题。如果只有某些RDBMS支持数据类型,那么如何允许您仍然使用它。好吧,当涉及到Doctrine 2和无符号数字时,他们有点懒。
我想做的就是存储我的64位Facebook ID。这有多难?好吧,我的RDBMS是MySQL,所以我真正需要的只是一个无符号bigint。
<?php
/**
* @Column(type="bigint", nullable=false, unique=true, columnDefinition="unsigned")
*/
Protected $facebookId;
<?php
/**
* @Column(type="decimal", precision=20, scale=0, nullable=false, unique=true)
*/
Protected $facebookId;
使用属性(PHP >= 8,Doctrine >= 2.9):
use Doctrine\ORM\Mapping as ORM;
/// ...
#[ORM\Column(type: 'integer', options: [
"unsigned" => true
])]
这是 Doctrine ORM 的文档链接,其中介绍了用于映射数据库表格列的“@Column”属性。您可以通过该文档了解如何使用和配置该属性以及它的选项设置和默认值。我在使用Doctrine 2时遇到了同样的问题,我采用了相同的解决方法,但是有一些优点:
/**
* @ORM\Column(name="id", type="integer", options={"unsigned"=true})
*/
运行差异迁移命令 bin/console doctrine:migration:diff 将会做一些魔法。实际上,如果该列是其他表中的外键,Doctrine 能够找到它们并应用与相关列相同的更新行。
在您的迁移中,只需要在列类型转换之前删除外键,然后在之后添加它们即可。
options: { unsigned: true }
? - MauganRa