2016-02-02 106 views
4

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

+1

我会(并且)使用[doctrine:migrations](http://symfony.com/doc/current/bundles/DoctrineMigrationsBundle/index.html)。您可以编辑迁移文件来做任何你喜欢的事情。这些可以从cli运行。可能接近你要找的东西。 – DevDonkey

回答

0

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

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