Doctrine2 ne définit pas la séquence par défaut pour la colonne id (postgres)
Juste un exemple simple: Si je veux créer une table avec remplissage automatique de l'id dans postgres je l'exécute sql:
CREATE SEQUENCE person_id_seq START 1;
CREATE TABLE person (
id integer PRIMARY KEY DEFAULT nextval('person_id_seq'),
name varchar(100) NOT NULL
);
et dans la doctrine, je mis tous les biens
class Person {
/**
* @Id
* @Column(type="integer", nullable=false)
* @GeneratedValue(strategy="SEQUENCE")
* @SequenceGenerator(sequenceName="person_id_seq", initialValue=1, allocationSize=100)
*/
private $id;
mais quand je le sql généré (php orm doctrine:schema-outil:créer --dump-sql) je l'ai eu:
CREATE TABLE person (
id INT NOT NULL,
name VARCHAR(100) NOT NULL
);
CREATE SEQUENCE person_id_seq INCREMENT BY 100 MINVALUE 1 START 1
mais ne définissez pas la valeur par défaut,
\d personne
Column | Type | Modifiers
-------------------+--------------------------------+-----------
id | integer | not null
...
..
.
source d'informationauteur Robertoq
Vous devez vous connecter pour publier un commentaire.
De la beaux-manuel:
Ils suggèrent
AUTO
pour une portabilité maximale:Qui doit créer et associer une séquence pour vous. Une autre solution serait de demander un
serial
colonne à l'aide de laIDENTITY
stratégie:Celui-ci devrait créer votre
id
colonne de typeserial
et PostgreSQL va créer la séquence et de définir la valeur par défaut pour vous.La documentation indique que ce que vous faites qui devrait fonctionner, mais la documentation habituellement ne fournit qu'une version simplifiée de la réalité.
Essayez d'utiliser
strategy="AUTO"
. Si cela ne fonctionne pas, essayezstrategy="IDENTITY"
.J'ai rencontré ce problème aujourd'hui et j'ai constaté que:
IDENTITÉ du bon travail, car il utilise de SÉRIE type de PostgreSQL, ce qui crée automatiquement liés à la séquence et la valeur par défaut définie comme nextval(séquence)
AUTO crée la table et ensuite la séquence, mais n'a pas de valeur par défaut définie pour la colonne id.
Il peut être défini par l'ajout de code suivant:
mais, malheureusement, la Doctrine de créer la table d'abord, nous avons donc besoin de swap de code SQL de création de la table et de la séquence dans l'ordre de cette séquence sera d'abord créé
SÉQUENCE fonctionne de la même que l'AUTO
Je rencontre également, que la séquence est générée, mais n'a pas attribué.
Donc, c'est la sortie de
bin/console doctrine:schema:create --dump-sql