Serginho
Serginho

Reputation: 7490

Doctrine migration and fixtures error

I execute migrations to create the database, after that, I want to fill database with some data. Why generate id strategy is not working?

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 load function

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

}

I'm using SQLite

Upvotes: 2

Views: 812

Answers (1)

Chase
Chase

Reputation: 9362

Your migration up does not create an auto incrementing id column. Just an integer column. If you change your migration up function to the following it should fix your issue:

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

Upvotes: 1

Related Questions