繁体   English   中英

如何迁移到与 Symfony 和 Doctrine 一起使用的数据库 PostgreSQL 的特定模式?

[英]How migrate to specific schema of database PostgreSQL working with Symfony and Doctrine?

在使用make:entity命令创建数据库结构后,我进行了迁移:

$ symfony 控制台制造:迁移

现在,我想将特定模式迁移到我的PostgresSQL数据库中。

在 Symfony 的文档中说:

手册表。 这是一个常见的用例,除了基于 doctrine 实体生成的数据库结构之外,您可能还需要自定义表。 默认情况下, doctrine:migrations:diff命令将删除此类表。 如果您遵循特定的方案,您可以将教义/dbal 配置为忽略这些表。 假设所有自定义表都以 t_ 为前缀。 在这种情况下,您只需将以下配置选项添加到您的 doctrine 配置中:

doctrine: dbal: schema_filter: ~^(?!t_)~

我知道schema_filter是通过正则表达式应用于表名(仅表?)的过滤器。 好吧,但是schema_filter没有引用创建到PostgreSQL数据库中的模式。

那么如何将特定模式迁移到数据库中呢?

当我执行命令时:

$ symfony 控制台制造:迁移

它会创建一个迁移文件,其中包含一个 class 和函数 'up' 和 'down',两者都带有参数$schema 这里有一个片段:

 public function up(Schema $schema) : void
 {
     // this up() migration is auto-generated, please modify it to your needs
     $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql', 'Migration can only be executed safely on \'postgresql\'.');

     $this->addSql('CREATE SEQUENCE division_id_seq INCREMENT BY 1 MINVALUE 1 START 1');

此参数在声明时不能赋值。 必须是 null。

是否可以使用它迁移到特定模式?

好吧,当我找到一种方法时,我是这样做的:

public function up(Schema $schema): void { // 此 up() 迁移是自动生成的,请根据需要修改 $this->abortIf($this->connection->getDatabasePlatform()->getName() ,== 'postgresql'. '迁移只能在'postgresql'上安全执行;');

     $this->addSql('CREATE SEQUENCE my_schema_name.division_id_seq INCREMENT BY 1 MINVALUE 1 START 1');

我的意思是我在命令生成的所有迁移代码中都写了模式名称。

但我仍然相信有可能以另一种方式做到这一点。 如果是,那怎么办?

我忘记了。 当我在第一句话之前尝试使用此行时,迁移失败:

 $this->addSql('SET search_path TO my_schema_name');

我也尝试将模式名称分配给参数 $schema:

 $schema = 'my_schema_name'

它也没有用。

嗯,谢谢。 我读到这个:

架构应通过 db 连接 dsn 设置,默认情况下所有表都以该架构结束。

然后我尝试在doctrine.yaml中设置连接参数: urldbname dbname/schema connectstring ,使用这个表示dbname.schema

然后,尽管如此:

您不应该将模式名称硬编码到迁移中。

在迁移文件中需要设置连接的架构:

public function up(Schema $schema) : void
{
    // this up() migration is auto-generated, please modify it to your needs
    $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'postgresql', 'Migration can only be executed safely on \'postgresql\'.');

    $this->connection->exec('SET search_path TO my_schema_name;');

    $this->addSql('CREATE SEQUENCE division_id_seq INCREMENT BY 1 MINVALUE 1 START 1');
    ...

但是表migration_versions不存在于模式中,所以我必须创建它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM