Bonjour à tous,
J'ai besoin d'un conseil, mais surtout d'une confirmation pour la structure de ma base de données.
Le thème de la base est plus ou moins un arbre généalogique. Du coup, j'ai une entité "Personne".
La problématique c'est :
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 namespace Rom\BaseBundle\Entity; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Mapping as ORM; /** * Gene\BaseBundle\Entity\Personne * * @ORM\Table() * @ORM\Entity(repositoryClass="Gene\BaseBundle\Entity\PersonneRepository") */ class Personne { /** * @var string $nom * * @ORM\Column(name="nom", type="string", length=25) */ private $nom; /** * @var string $prenom * * @ORM\Column(name="prenom", type="string", length=25) */ private $prenom; //etc..... }
1) une personne peut être "mariée" à une autre personne d'où relation OneToOne réflexive.
2) Une personne peut avoir plusieurs enfants (Personnes) et un enfant-Personne à deux Parents-Personnes. On a donc une relation réflexive ManyToMany.
ce qui me donne le code suivant :
// Pour la situation maritale
Pour les enfants_parents :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 /** *@ORM\OneToOne(targetEntity="Personne", mappedBy="indiv", cascade={"persist" , "remove"}) *@ORM\joinColumn(onDelete="set null", nullable=true) */ private $conjoint; /** *@ORM\OneToOne(targetEntity="Personne", inversedBy="conjoint", cascade={"persist" , "remove"}) *@ORM\joinColumn(onDelete="set null", nullable=true) */ private $indiv;
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 /** *@ORM\ManyToMany(targetEntity="Personne" mappedBy="parents", cascade={"persist"}) *@ORM\joinColumn(nullable=true) */ private $enfants; /** *@ORM\ManyToMany(targetEntity="Personne" inversedBy="enfants", cascade={"persist"}) *@ORM\joinColumn(nullable=true) */ private $parents; public function(){ $this->parents = new arrayCollection(); $this->enfants = new arrayCollection(); }
Est-ce que cette structure vous parait correcte ?
Au final dans le formulaire, je dois pouvoir :
1) Créer Conjoint2 et sélectionner le nom et prenom du conjoint1 déjà enregistré. Ce qui met à jour la ligne du conjoint1 avec référence à conjoint2.
2) créer parents1 et créer ses enfants en même temps. Ce qui implique que :
- les Enfants-personnes créés apparaissent en temps que personnes
- les références aux parents apparaissent aussi suivant la situation maritale
- les enfants apparaissent dans la "fiche"' parents2.
Je ne sais pas si je suis très claire. Et d'ailleurs, j'ai un peu de mal à voir la tête de mon(mes) controllers. Mais pour lemoment, j'aimerais avoir des Entites et une base fonctionnelles, et je m'arrache déjà suffisamment les cheveux...........![]()
A votre avis est-ce que cela irait ?
Merci pour votre aide
Partager