Symfony2 Doctrine Migration - 迁移文件中的内容

Ora*_*ras 0 migration entity doctrine symfony

我的symfony项目中有3个实体管理器,我想将新表添加到特定的实体管理器.我知道我可以通过使用以下命令传递--em ="EntityManager1"从命令行执行此操作:

php app/console doctrine:migration:migrate --em="EntityManager1"
Run Code Online (Sandbox Code Playgroud)

但我想在代码本身中这样做.

例:

public function up(Schema $schema)
{
    $this->abortIf($this->connection->getDatabasePlatform()->getName() != "mysql");?
    $this->addSql("CREATE TABLE `myTable` (
             `id` int(11) NOT NULL,
             `name` varchar(45) DEFAULT NULL,
             `email` varchar(45) DEFAULT NULL,
              PRIMARY KEY (`id`)
              ) ENGINE=InnoDB DEFAULT CHARSET=latin1?");
}

public function down(Schema $schema)
{
    $this->abortIf($this->connection->getDatabasePlatform()->getName() != "mysql"); 
    $this->addSql("DROP TABLE myTable");?
}
Run Code Online (Sandbox Code Playgroud)

提前致谢

rol*_*ebi 6

根据https://github.com/doctrine/DoctrineMigrationsBundle/issues/38

你必须实现 Symfony\Component\DependencyInjection\ContainerAwareInterface

use Doctrine\DBAL\Migrations\AbstractMigration;
use Doctrine\DBAL\Schema\Schema;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

class Version20140717170412 extends AbstractMigration implements ContainerAwareInterface
{
    /**
     * @var ContainerInterface
     */
    protected $container;

    /**
     * {@inheritdoc}
     */
    public function setContainer(ContainerInterface $container = null)
    {
        $this->container = $container;
    }
Run Code Online (Sandbox Code Playgroud)

然后

/**
 * {@inheritdoc}
 */
public function up(Schema $schema)
{

    $myEmConnection = $this->container->get('doctrine')
        ->getManager('my_em')->getConnection();

    $this->skipIf(
        $this->connection !== $myEmConnection,
        'Require my_em manager'
    );
Run Code Online (Sandbox Code Playgroud)