2016-05-10 16 views
1

Ich führe Migrationen um die Datenbank zu erstellen, danach möchte ich die Datenbank mit einigen Daten füllen. Warum ID-Strategie generieren funktioniert nicht?Doktrin Migration und Fixtures Fehler

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 

Fixture Ladefunktion

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

Migration

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

} 

Ich verwende SQLite

+0

können Sie die Naviera-Entity posten? – Vamsi

+0

Post es! Viel Glück mit diesem Problem. hehe – Serginho

Antwort

1

Ihre Migration nach oben erstellt keine automatisch inkrementierende ID-Spalte. Nur eine ganzzahlige Spalte. Wenn Sie Ihre Migrationsfunktion auf die folgende Weise ändern, sollte Ihr Problem behoben sein:

public function up(Schema $schema) 
{ 
    $navieras = $schema->createTable('navieras'); 
    $navieras->addColumn('id', 'integer', ['Autoincrement' => true]); 
    $navieras->addColumn('nombre', 'string'); 
    $navieras->setPrimaryKey('id', true); 
}