2016-05-10 2 views
1

Выполняю миграции для создания базы данных, после чего я хочу заполнить базу данных некоторыми данными. Почему генерировать идентификационную стратегию не работает?Ошибка миграции и привязки Doctrine

bin/console doctrine:migrations:migrate 

        Migrations      


WARNING! You are about to execute a database migration that could result in schema changes and data lost. Are you sure you wish to continue? (y/n)y 
Migrating up to 20160510103145 from 0 

    ++ migrating 20160510103145 

    -> CREATE TABLE navieras (id INTEGER NOT NULL, nombre VARCHAR(255) NOT NULL) 

    ++ migrated (0.14s) 

    ------------------------ 

    ++ finished in 0.14s 
    ++ 1 migrations executed 
    ++ 1 sql queries 




bin/console doctrine:fixtures:load  
Careful, database will be purged. Do you want to continue y/N ?y 
    > purging database 
    > loading AppBundle\DataFixtures\ORM\LoadNavieraData 


    [Doctrine\DBAL\Exception\NotNullConstraintViolationException]              
    An exception occurred while executing 'INSERT INTO navieras (nombre) VALUES (?)' with params ["Royal Caribbean"]: 
    SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: navieras.id       



    [Doctrine\DBAL\Driver\PDOException]               
    SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: navieras.id 



    [PDOException]                    
    SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: navieras.id 

Крепеж нагрузки функция

public function load(ObjectManager $manager) 
{ 
    $naviera = new Naviera(); 
    $naviera->setNombre('aaaaaaaaaaaaaaa'); 

    $naviera2 = new Naviera(); 
    $naviera2->setNombre('bbbbbbbbbbbbbb'); 

    $manager->persist($naviera); 
    $manager->persist($naviera2); 
    $manager->flush(); 
} 

миграции

public function up(Schema $schema) 
{ 
    $navieras = $schema->createTable('navieras'); 
    $navieras->addColumn('id', "integer"); 
    $navieras->addColumn('nombre', "string"); 
} 

/** 
* @param Schema $schema 
*/ 
public function down(Schema $schema) 
{ 
    $schema->dropTable('navieras'); 
} 

Naviera Entity

/** 
* Modelo naviera 
* 
* @Entity 
* @Table(name="navieras") 
*/ 
class Naviera 
{ 
    /** 
    * @Id 
    * @Column(type="integer") 
    * @GeneratedValue 
    */ 
    private $id; 

    /** 
    * @Column(type="string"); 
    */ 
    private $nombre; 

    /** 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * @param integer $id 
    */ 
    public function setId($id) 
    { 
     $this->$id = $id; 
    } 

    /** 
    * @return string 
    */ 
    public function getNombre() 
    { 
     return $this->nombre; 
    } 

    /** 
    * @param string $nombre 
    */ 
    public function setNombre($nombre) 
    { 
     $this->nombre = $nombre; 
    } 

} 

Я использую SQLite

+0

Вы можете разместить объект Naviera? – Vamsi

+0

Опубликовать! Удачи с этой проблемой. хе-хе – Serginho

ответ

1

Ваш переход не создает столбец с индексом автоматического увеличения. Просто целочисленный столбец. Если вы измените свою функцию перехода на следующую, она должна исправить вашу проблему:

public function up(Schema $schema) 
{ 
    $navieras = $schema->createTable('navieras'); 
    $navieras->addColumn('id', 'integer', ['Autoincrement' => true]); 
    $navieras->addColumn('nombre', 'string'); 
    $navieras->setPrimaryKey('id', true); 
} 
Смежные вопросы