Doctrine orm 原则2.5 GUID字段默认值

Doctrine orm 原则2.5 GUID字段默认值,doctrine-orm,default,default-value,doctrine-orm-postgres,Doctrine Orm,Default,Default Value,Doctrine Orm Postgres,我正在尝试为UUID类型字段设置默认值 /** * @var int * * @ORM\Column(name="uuid", type="guid", options={"default"="uuid_generate_v4()"}) * @ORM\Id() * @ORM\GeneratedValue(strategy="UUID") */ private $uuid; 然而,这设置执行 ALTER TABLE store ALTER uuid SET DEFAULT'uuid_

我正在尝试为UUID类型字段设置默认值

/**
 * @var int
 *
 * @ORM\Column(name="uuid", type="guid", options={"default"="uuid_generate_v4()"})
 * @ORM\Id()
 * @ORM\GeneratedValue(strategy="UUID")
 */
private $uuid;
然而,这设置执行

ALTER TABLE store ALTER uuid SET DEFAULT'uuid_generate_v4()


并将其作为文本。如何在条令注释中将DB函数定义为默认值?

在创建表中,您可以使用此注释

/**
 * @ORM\Column(name="uuid", type="guid", columnDefinition="DEFAULT uuid_generate_v4()", options={"comment"="Column Comment Here"})
 * @ORM\Id()
 * @ORM\GeneratedValue(strategy="UUID")
 */
private $uuid;
列定义将内容附加到DDL

此配置的SQL输出为

ALTER TABLE table_name ADD uuid DEFAULT uuid_generate_v4();
COMMENT ON COLUMN table_name.uuid IS 'Column Comment Here';
这些注释对“更改”列不起任何作用。仅适用于添加列生成的SQL。必须手动重新创建列或更改表

重要提示: 对于那些在PostgreSQL中寻找create的人,请记住需要启用一些扩展来使用创建uuid哈希的函数

在本例中,uuid\u generate\u v4()是从中派生的,较旧版本的PostgreSQL不支持它。 相反,UUID-OSSP可以从中使用gen_random_UUID()函数。UUID结果是相同的版本(v4)。同样,旧版本不支持它

只需记住使用安装扩展即可

另一个重要注意事项:在某些PostgreSQL安装(如CentOS)中,默认情况下不包括扩展。你必须安装它们

对于CentOS/RHEL,您需要安装postgresql contrib。请注意PostgreSQL的版本。即,对于9.5版,您必须使用postgresql95 contrib

我的特权很弱 有一个技巧可以创建没有扩展的uuid哈希。只需使用上面的说明

uuid_in(md5(random()::text || clock_timestamp()::text)::cstring);
如果您的版本支持::UUID强制转换,请使用

md5(random()::text || clock_timestamp()::text)::uuid
md5(random()::text || clock_timestamp()::text)::uuid