Doctrine OneToOne incorrectement? générer un INDEX UNIQUE
SchemaTool génère un index unique pour les associations qui sont OneToOne. Je crois que c'est incorrect.
La Section 6.6 de la page de manuel Associations à Doctrine montre un exemple D'un OneToOne pour un produit a une expédition. Ceci est montré pour générer la table de produit:
CREATE TABLE Product (
id INT AUTO_INCREMENT NOT NULL,
shipping_id INT DEFAULT NULL,
PRIMARY KEY(id)
) ENGINE = InnoDB;
Cependant, avec le même code pour mon entité User a une Organisation, ma table utilisateur SQL est générée comme
CREATE TABLE User (
id INT AUTO_INCREMENT NOT NULL,
organisation_id INT DEFAULT NULL,
UNIQ_3B978F9FA7F43455 (organisation_id),
PRIMARY KEY(id)
) ENGINE = InnoDB;
Cela m'empêche d'ajouter 2 utilisateurs avec la même Organisation. Pas correct.
J'ai ajouté que j'essayais d'être verbeux avec le paramètre unique D'annotation JoinColumn.
@JoinColumn(name="organisation_id", referencedColumnName="id", unique="false")
Des idées? Je n'arrive pas à trouver quoi que ce soit à ce sujet.
Merci
2 réponses
Si une organisation a beaucoup D'utilisateurs et que beaucoup D'utilisateurs ont une et une seule organisation, alors ce n'est pas une association individuelle.
Les associations individuelles doivent être uniques.
Votre association est ManyToOne
côté utilisateur et OneToMany
côté organisation.
Utilisateur.php
/**
* @ManyToOne(targetEntity="Organisation")
*/
private $organisation;
Organisation.php
use Doctrine\Common\Collections\ArrayCollection;
/**
* @OneToMany(targetEntity="User", mappedBy="organisation")
*/
private $users;
function __construct() {
$this->users = new ArrayCollection();
}
Peut-être qu'une version YML pourrait aider quelqu'un d'autre en commençant par doctrine / symfony, voici ma version:
dans de l'Utilisateur.orm.yml
manyToOne:
organisation:
targetEntity: Organisation
joinColumn:
name: organisation_id
referencedColumnName: id
Dans L'Organisation.orm.yml
onToMany:
users:
targetEntity: User
mappedBy: organisation
joinColumn:
name: organisation_id
referencedColumn: id
J'espère que ça aide.