Entité faible

a marqué ce sujet comme résolu.

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 ! :)

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();
+0 -0

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 :)

+0 -0

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.

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.

Edit

Depuis Doctrine 2.8, le support des ID composés de clés étrangères est à nouveau officiel.

+0 -0

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 :)

+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.

+0 -0

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.

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
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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