2016-03-14 170 views
3

我是Symfony的新手。在Symfony的2.8.3项目,我创建了使用Symfony2原则迁移失败

php app/console doctrine:migrations:generate 

mirgation文件,但是当我把一些代码了()和向下()方法,并尝试运行

php app/console doctrine:migrations:migrate 

我得到的错误:

迁移20160314161511在预检时失败。错误通知:未定义偏移:1

[Symfony的\元器件\调试\异常\ ContextErrorException] 注意:未定义偏移:1

我试图通过使用 “透明” SQL或经由方案把不同的代码,甚至只留下//注释的向上/向下方法。但仍然没有成功。 DoctrineMigrationsBundle已在AppKernel.php中安装并注册。 这里是我的目标mirgation的代码:

namespace Application\Migrations; 

use Doctrine\DBAL\Migrations\AbstractMigration; 
use Doctrine\DBAL\Schema\Schema; 

/** 
* Auto-generated Migration: Please modify to your needs! 
*/ 
class Version20160314161511 extends AbstractMigration 
{ 
    /** 
    * @param Schema $schema 
    */ 
    public function up(Schema $schema) 
    { 
     $this->addSql(
      "CREATE TABLE tblProductData (
      intProductDataId int(10) unsigned NOT NULL AUTO_INCREMENT, 
       strProductName varchar(50) NOT NULL, 
       strProductDesc varchar(255) NOT NULL, 
       strProductCode varchar(10) NOT NULL, 
       dtmAdded datetime DEFAULT NULL, 
       dtmDiscontinued datetime DEFAULT NULL, 
       stmTimestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
       PRIMARY KEY (intProductDataId), 
       UNIQUE KEY (strProductCode) 
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Stores product data'" 
     ); 

    } 

    /** 
    * @param Schema $schema 
    */ 
    public function down(Schema $schema) 
    { 
     $this->addSql(
      'DROP TABLE tblProductData' 
     ); 

    } 
} 

这里是我的config.yml的doctrine_migrations部分:config.yml的

doctrine_migrations: 
    dir_name: "%kernel.root_dir%/DoctrineMigrations" 
    namespace: Application\Migrations 
    table_name: migration_versions 
    name: Application Migrations 

学说节我留下了默认值

当我用

php app/console doctrine:migrations:status 

我得到可用迁移:1和新迁移:1 非常感谢!

+0

为什么你要手工制作迁移文件。为什么不“学说:迁移:差异”? – Putr

+0

感谢您的评论。我尝试使用:diff命令,但我仍然有同样的错误。另外,当我将新字段添加到实体时,此字段在创建的迁移中不存在。 – Partagas

+0

那么,一个未经修改的自动生成的迁移会抛出这个错误? – Putr

回答

0

这是zend-code库中的一个已知错误,它是DoctrineMigrations的依赖关系,此问题仅在Windows上出现。临时解决方法是去vendors/zend-code/Generator/MethodGenerator.php#L96和改变:

protected static function clearBodyIndention($body) { 
    .... 
    $lines = explode(PHP_EOL, $body); 
    .... 
    $body = implode(PHP_EOL, $lines); 
    .... 
} 

到:

protected static function clearBodyIndention($body) { 
    .... 
    $lines = explode("\n", $body); 
    .... 
    $body = implode("\n", $lines); 
    .... 
} 

DoctrineMigrations的开发者注意到了这个错误,你可以找到在这个issue更多信息。

此时有一个pull requestzend-code并希望这将很快合并到主,然后将解决问题。