2016-04-15 14 views
1

Aktualisierung Ist es möglich (oder ausführen) eine benutzerdefinierte SQL-Abfragen angefügt wird, wenn die Ausführung:SQL-Skript ausführen, wenn das Datenbankschema Lehre

app/console doctrine:schema:update --force 

ich ein Skript, das alle meine Ansichten erstellen, und ich möchte, dass sie aktualisiert werden Immer wenn ich das Datenbankschema aktualisiere.

+0

Sie können benutzerdefinierte Konsolenbefehle auf Symfony erstellen: [link] (http://symfony.com/doc/current/cookbook/console/console_command.html). –

+0

Gibt es eine Möglichkeit, das Doktrin-Kommando zu erweitern? –

+0

sieh dir das an (link) (http://symfony.com/doc/current/cookbook/console/console_command.html#invoking-other-commands) –

Antwort

5

Sicher, Sie können den UpdateSchemaCommand Befehl erweitern und die EntityManager in durch defining the command as a service injizieren.

Der Befehl:

// 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); 
    } 
} 

Der Service:

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

Hoffnung, das hilft.

+0

yep es hat funktioniert! danke @chalasr –

+0

du bist willkommen @MNIFAKRAM. Nur für den Fall, warum Sie die Antwort nicht abgestimmt haben? Denkst du, dass es etwas gibt, das nicht in der Antwort enthalten ist oder besser sein könnte? Manchmal haben SO Anfänger einfach vergessen zu wählen. – chalasr

+0

Sorry, ich habe es vergessen. –