如何在架构更新中处理自定义sql函数?

时间:2016-02-02 15:27:54

标签: symfony doctrine

有时,当您在寻找性能时,您需要使用某种复杂性函数和触发器将一些职责委托给数据库。我想知道当调用doctrine:schema:update命令时,处理这些自定义sql函数以创建/更新的最佳实践是什么。

2 个答案:

答案 0 :(得分:1)

您(我认为)更简单的解决方案是创建自己的命令,在内部执行逻辑,并在结束时调用doctrine:schema:update

为此,您可以从UpdateSchemaDoctrineCommand扩展命令,或在命令中使用Process

我更喜欢第一种解决方案,我也会告诉你。

src/Acme/AppBundle/Command/CustomUpdateSchemaDoctrineCommand.php中创建命令 (例如,使用您自己的一个包)

然后,从父命令扩展它,如下所示:

<?php

namespace Acme\AppBundle\Command;

use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Doctrine\Bundle\DoctrineBundle\Command\Proxy\UpdateSchemaDoctrineCommand;

class CustomUpdateSchemaDoctrineCommand extends UpdateSchemaDoctrineCommand
{
    protected function configure()
    {
        parent::configure();

        $this->setName('custom:schema:update')
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        // Do your logic

        // Update your database schema
        return parent::execute($input, $output);

    }
}

如果您需要一个允许您运行SQL迁移的工具,请使用DoctrineMigrationsBundle

答案 1 :(得分:0)

我不知道如何实现自动运行其他SQL代码,但您可以使用DoctrineMigration。它是手动运行的,但您可以编写自定义SQL和控件版本 - 文件包含创建日期,使用的迁移名称将存储在DB中。