J'ai une entité qui est une ternaire entre Session, Etablissement et Utilisateur

et je voudrais pouvoir avoir des tuples du type (null, institutionId, sessionId...) ou (null, null, sessionId...), (userId, institutionId, sessionId...)
car pour moi, ces clés, tant que le triplon est différent devraient être valides.

Voici le code de l'entité :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
/**
 * @ORM\Table(name="institutioncontactsessionorganization")
 * @ORM\Entity(repositoryClass="MyBundle\Repository\InstitutionContactSessionOrganizationRepository")
 * @UniqueEntity(
 *     fields={"icsoInstitution", "icsoSession", "icsoUser"},
 *     errorPath="departmentName",
 *     message="this association already exists"
 * )
 */
class InstitutionContactSessionOrganization
{
  /**
   * @ORM\Id
   * @ORM\ManyToOne(targetEntity="MyBundle\Entity\Institution", inversedBy="icsos")
   * @ORM\JoinColumn(name="institutionId", referencedColumnName="id", nullable=true)
   */
  private $icsoInstitution;
 
  /**
   * @ORM\Id
   * @ORM\ManyToOne(targetEntity="MyBundle\Entity\Session", inversedBy="icsos")
   * @ORM\JoinColumns({
   *   @ORM\JoinColumn(name="sessionId", referencedColumnName="id", nullable=true)
   * })
   */
  private $icsoSession;
 
  /**
   * @ORM\Id
   * @ORM\ManyToOne(targetEntity="MyBundle\Entity\User", inversedBy="icsos")
   * @ORM\JoinColumns({
   *   @ORM\JoinColumn(name="userId", referencedColumnName="id", nullable=true)
   * })
   */
  private $icsoUser;
...
}
Mon problème est que le nullable=true n'est pas pris en compte lors de la génération de la table.

j'obtiens

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
CREATE TABLE institutioncontactsessionorganization (departmentName VARCHAR(255) DEFAULT NULL, phone VARCHAR(16) DEFAULT NULL, institutionId INT NOT NULL, sessionId INT NOT NULL, userId INT NOT NULL, INDEX IDX_43EDEF2F76065B2 (institutionId), INDEX IDX_43EDEF23950B5F6 (sessionId), INDEX IDX_43EDEF264B64DCC (userId), PRIMARY KEY(institutionId, sessionId, userId)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
ALTER TABLE institutioncontactsessionorganization ADD CONSTRAINT FK_43EDEF2F76065B2 FOREIGN KEY (institutionId) REFERENCES institution (id);
ALTER TABLE institutioncontactsessionorganization ADD CONSTRAINT FK_43EDEF23950B5F6 FOREIGN KEY (sessionId) REFERENCES session (id);
ALTER TABLE institutioncontactsessionorganization ADD CONSTRAINT FK_43EDEF264B64DCC FOREIGN KEY (userId) REFERENCES user (id);
je n'ai lu nulle part que Doctrine ne permettais pas ce genre de chose (je n'ai pas réussi à trouver grand chose sur les ternaire et clé composites pour Doctrine)

Est-ce un problème d'annotation ?
Est-ce impossible dans Doctrine ?
Je ne souhaiterais pas devoir "artificiellement" changer cette vraie ternaire en entité "classique" avec un Id unique et userId, institutionId, et session Id en clés étrangères.

Merci d'avance