2016-04-15 14 views
1

を更新するとき、それは追加することは可能ですSQLスクリプトを実行する(または実行):カスタムSQLクエリをデータベース・スキーマ・ドクトリン

app/console doctrine:schema:update --force 

を私はすべてのビューを作成するスクリプトを持っていると私はそれらを更新することにしたいです私がデータベーススキーマを更新するたびに。

+0

symfonyでカスタムコンソールのコマンドを作成できます。[link](http://symfony.com/doc/current/cookbook/console/console_command.html)。 –

+0

doctrineコマンドを拡張する方法はありますか? –

+0

この[link](http://symfony.com/doc/current/cookbook/console/console_command.html#invoking-other-commands)をご覧ください –

答えて

5

もちろん、UpdateSchemaCommandコマンドを拡張してEntityManagerdefining the command as a serviceに挿入することができます。

コマンド:

// src/AppBundle/Command/CustomUpdateSchemaCommand.php 
<?php 

namespace AppBundle\Command; 

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

class CustomUpdateSchemaCommand extends UpdateSchemaDoctrineCommand 
{ 
    /** @var EntityManagerInterface */ 
    private $em; 

    /** 
    * @param EntityManagerInterface $em 
    */ 
    public function __construct(EntityManagerInterface $em) 
    { 
     $this->em = $em; 

     parent::__construct(); 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    protected function configure() 
    { 
     parent::configure(); 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    protected function execute(InputInterface $input, OutputInterface $output) 
    { 
     $output->writeln('Hello world'); 
     $conn = $this->em->getConnection(); 
     $conn->exec(/* QUERY */); 


     return parent::execute($input, $output); 
    } 
} 

サービス:

// app/config/services.yml 
app.command.custom_schema_update_command: 
    class: App\SportBundle\Command\CustomUpdateSchemaCommand 
    arguments: ["@doctrine.orm.entity_manager"] 
    tags: 
     - { name: console.command } 

は、この情報がお役に立てば幸いです。

+0

うまくいった!ありがとう@チャラール –

+0

ようこそ@MNIFAKRAM。ちょうどその場合、なぜあなたは答えに投票していないのですか?あなたは、答えにないか、あるいはより良いものがあると思いますか?時にはSO初心者が投票を忘れてしまった。 – chalasr

+0

申し訳ありませんが、私は忘れました。 –

関連する問題