Entité faible

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour ! Je suis en train de faire un site avec symfony pour les cours et lors de la modélisation de ma database j'ai choisit de faire des entités faibles. Du coup, comment fais-je pour créer les entités comme tel ? Si c'est impossible comment faire ?

Merci d'avance ! :)

+0 -0
Staff

bah comme pour les autres non? A ceci près qu'avant de les flusher, tu dois impérativement renseigner les relations qui n'acceptent pas null.

1
2
3
4
5
6
7
<?php
$entite_faible = new MonEntiteFaible();
$entite_faible->setRelation1($objetRelation1);
$entite_faible->setRelation2($objetRelation2);
$entite_faible->setRelationN($objetRelationN);
$repository->add($entite_faible);
$repository->flush();

Édité par artragis

+0 -0
Auteur du sujet

En fait je viens de me rendre compte que j'ai dit une connerie :p

Ma question c'était plutôt comment on fait pour mettre deux clefs primaires ? Mais j'ai pas vu qu'il restait des chapitres ^^

Ma question c'est plutôt comment fait-on pour mettre plusieurs clefs primaires, mais si la réponse est dans le tuto je vais le voir dans pas longtemps.

Edit : Je n'ai jamais fait de web avant et tout le SQL que j'ai fait c'est du papier et Oracle ! Du coup je suis assez pommé… En gros j'ai mes tables avec les clefs primaires et étrangères, mais je ne sais pas comment faire pour passer à symfony…

Voici mes différentes tables

1
2
3
4
5
USER(_id, firstname, lastname, birthdate, inscriptiondate)
FRIENSHIP(_#UserID1, _#UserID2)
PUBLICATION(_id, _#UserID, text, public)
LIKE(_#UserID, _#PublicationID)
COMMENTARIES(_id, text, #UserID)

Le # correspond aux clefs étrangères et _ aux clef primaires :)

Édité par Ricocotam

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

En terme de clef primaire en SQL on ne peut en mettre qu'une seule par table et c'est logique.

Par contre, on peut dire que la clef primaire est l'union de deux champs.

Dans notre cas, Symfony ne le permet pas tout seul et à part bidouiller le SQL de création de table, on ne peut pas aller cehrcher ce genre de fonctionnalités.

Je dirais juste que :

dans ta table PUBLICATION, UserID ne doit pas être une part de la clef primaire, ça n'a aucun sens.

+1 -0

Cette réponse a aidé l'auteur du sujet

Salut !

Si jamais, il n'y a que Doctrine 2.1 et donc Symfony 2.0 qui supportait officiellement les clés primaires sur des clés étrangères. L'alternative préconisée est de créer une clé primaire sur une colonne unique.
Heureusement, dans le cas que tu nous décris (s'il est bien complet), tu n'auras pas d'entité "faible" FRIENDSHIP, dans la mesure où Doctrine va prendre cette table comme "pont" pour une relation ManyToMany. Et pour la table PUBLICATION, ben tu as déjà un ID sur une colonne unique, pourquoi le coupler à une clé étrangère ?

Pour ce qui est du SQL, il faut vraiment éviter d'y penser quand on travaille avec Doctrine et qu'on définit ses entités, parce que justement, il y a des mécanismes/structures qui ne sont pas les mêmes que si on ne raisonnait qu'en SQL.

Evitez qu'on vous dise de les lire : FAQ PHP et Symfony 2Tutoriel WAMP • Cliquez 👍 pour dire merci • Marquez vos sujets résolus

+0 -0
Auteur du sujet

Donc si j'ai bien compris, mes tables FRIENDSHIP et LIKE sont en réalité faites avec les relations et pour le reste tant pis ?

Sinon ça a du sens puisque c'est possible et que mes profs me l'ont explicitement enseigné.

Un petit exemple : Tu stock des hotels (qui sont identifié par un id) et des chambres (identifié par leur numero). Sauf que tu aimerais que pour chaque hotel il y ait la chambre numero 1 (par exemple). Chambre est donc une entité faible de hotel. Chambre a comme clef primaire : numeroChambre ET idHotel !

Mais tant pis on peut faire sans !

Edit : Ymox En fait je viens vraiment pas du developpement et web et c'est pas spécialement ma tasse de thé (je suis plutot algorithmes) mais puisque symfony c'est bien autant l'utiliser ! J'ai beaucoup de mal à m'y adapter parce que depuis 1 an on fait du SQL, c'est assez perturbant du coup ! :)

Merci du coup :)

Édité par Ricocotam

+0 -0

Un petit exemple : Tu stock des hotels (qui sont identifié par un id) et des chambres (identifié par leur numero). Sauf que tu aimerais que pour chaque hotel il y ait la chambre numero 1 (par exemple). Chambre est donc une entité faible de hotel. Chambre a comme clef primaire : numeroChambre ET idHotel !

Ricocotam

Pour continuer l'exemple, un jour il est décidé de renuméroter les chambres… et c'est le drame, parce que la clé primaire est le numéro de ladite chambre  ^^

Et la chambre en elle-même ne change pas, c'est juste une de ses propriétés.

Édité par Ymox

Evitez qu'on vous dise de les lire : FAQ PHP et Symfony 2Tutoriel WAMP • Cliquez 👍 pour dire merci • Marquez vos sujets résolus

+0 -0
Staff

Sinon ça a du sens puisque c'est possible et que mes profs me l'ont explicitement enseigné.

On a tous appris l' exemple de l' hôtel. Seulement ici il ne s'applique pas.

Dans la vraie vie la clef primaire partagée n' existe que dans le cas des entités faibles, notamment les relations ne pouvant avoir lieu qu'une fois entre deux mêmes entités et qu' on veut dater cette fois. Des lors, l' entité faible en question n' a pas d'identifiant et sa clef primaire est l' union des deux clefs étrangères.

+0 -0
Auteur du sujet

J'évite de refaire un sujet pour une simple question : Comment définir une relation reflexive en ManytoMany ? j'ai chercher un peu sur le web et j'ai trouver des bouts de code disant que ça marchait pas.. Voici ce que j'ai fait, je n'arrive pas a vérifier si c'est bon (problème de connexion) :

1
2
3
4
/**
 * @ORM\ManyToMany(targetEntity="PWEB\SocialNetorkBundle\Entity\User")
 */
 private $friend
+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte