2016-02-02 27 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