Single id is not allowed on composite primary key in entity

Symfony 2 utilisé avec Doctrine gère logiquement les clés primaire multiple … Cependant après la génération des modèles de toutes les tables de la base de données et les entités (Entity) respectives, j’avais un petit problème lors de l’ajout d’un utilisateur.

Mes tables sont construites de la manière à ce que :

1 – compte -> table Accounts.

2 – Utilisateur -> table Users -> liée à la table Accounts par le biais du champ id_account = id (table Accounts).

3 – Compagny -> table Companies -> liée à la table Accounts par le biais du champ id_account = id (table Accounts).

Dans les deux cas la clé primaire (PK – PRIMARY) est créée sur le coup id (de la table users ou companies) ET id_account.

Là symfony2 et plus particulièrement Doctrine, se mélange les pinceaux !

Afin de permettre le fonctionnement de cette clé primaire double, il faut faire une correction au niveau de l’entité (Entity) sur le commentaire de définition de l’id :

/**
* @var \Accounts
*
* @ORM\Id
* @ORM\GeneratedValue(strategy= »NONE »)
* @ORM\OneToOne(targetEntity= »Accounts »)
* @ORM\JoinColumns({
*   @ORM\JoinColumn(name= »id_account », referencedColumnName= »id »)
* })
*/
private $idAccount;

La suppression de la ligne :

*@ORM\Id

Permet de rectifier la problématique de clé primaire multiple.

Autre solution, pour garder la relation, de manière explicite sans retour d’erreur :

/**
* @ORM\OneToOne(targetEntity= »App\MonBundle\Entity\Accounts », mappedBy= »id »)
*/
private $idAccount;

Pour en savoir plus : http://doctrine-orm.readthedocs.org/en/latest/tutorials/composite-primary-keys.html

la réponse déjà donnée chez Stackoverflow : http://stackoverflow.com/questions/19683811/getting-issues-while-trying-to-generate-doctrine2-crud

Publicités

About this entry