Symfony 2 propose une abstraction des entities très intéressante grâce à Doctrine. Je poste ce petit article car j’ai eu une erreur tout simple:
$ php app/console doctrine:schema:update --force Updating database schema... [PDOException] SQLSTATE[42601]: Syntax error: 7 ERREUR: erreur de syntaxe sur ou près de « User » LINE 1: CREATE TABLE User (id INT NOT NULL, username VARCHAR(255) NO... ^
En fait, j’ai créé un bundle nommé User, et doctrine souhaite donc créer la table User. Le problème, c’est que user est un mot clé réservé dans PostgreSQL. Par conséquent, il faut donc forcer Doctrine à escaper le nom de la table. Pour se faire, il suffit d’ajouter une annotation Table en préfixant et suffixant le nom de la table par `.
Voici par exemple ma classe User avant la correction:
/** * @ORM\Entity */ class User extends BaseUser { // ... }
Il suffit donc de d’ajouter l’annotation @ORM\Table en spécifiant le nom de la table entouré de `. Le nouveau code est:
/** * @ORM\Entity * @ORM\Table(name="`User`") */ class User extends BaseUser { // ... }
Ainsi, Doctrine va générer ses requêtes en ajoutant des caractères d’échappement sur le nom de la table. Ainsi, vous n’aurez plus d’erreur!