Reputation: 7490
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
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