Doctrine 2.5 GUID字段默认值

时间:2017-12-03 12:49:37

标签: doctrine-orm default default-value doctrine-orm-postgres

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

                                   ▼
function modulecontractsSelect(checkbox) {
    if (checkbox.checked) {
       document.getElementById("module-contracts-summary").innerHTML = "Module contractbeheer"
       document.getElementById("module-contracts-summary-price").innerHTML = "€5 / mnd";
    }
    else {
       document.getElementById("module-contracts-summary").innerHTML  = "";
       document.getElementById("module-contracts-summary-price").innerHTML  = "";
    }
}

然而,此设置执行

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

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

1 个答案:

答案 0 :(得分:1)

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

/**
 * @ORM\Column(name="uuid", type="guid", columnDefinition="DEFAULT uuid_generate_v4()", options={"comment"="Column Comment Here"})
 * @ORM\Id()
 * @ORM\GeneratedValue(strategy="UUID")
 */
private $uuid;

ColumnDefinition 将内容附加到DDL see Doctrine Documentation

此配置的SQL输出是

ALTER TABLE table_name ADD uuid DEFAULT uuid_generate_v4();
COMMENT ON COLUMN table_name.uuid IS 'Column Comment Here';

这些注释对CHANGE COLUMN没有任何作用。仅适用于ADD COLUMN生成的SQL。您必须手动重新创建列或更改表格。

  

重要提示:   对于那些在PostgreSQL中寻找创建UUID Column Type的人,请记住,你需要启用一些扩展来使用创建uuid-hashes的函数。

在示例中, uuid_generate_v4() 源自UUID-OSSP,旧版本的PostgreSQL不支持它。 相反,UUID-OSSP可以使用PGCRYPTO中的 gen_random_uuid() 功能。 UUID结果是相同的版本(v4)。同样,旧版本不支持它。

请记住使用Create Extension安装扩展程序。

CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; // OR
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
  

另一个重要说明:在某些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