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

29
demandé sur PorridgeBear 2011-11-21 03:16:48

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();
}
43
répondu Kasheen 2011-11-21 12:38:29

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.

0
répondu Gardner 2014-10-25 15:47:42