Bonjour,
pour me mettre à Symfony2 j'ai commencé une petite application de gestion de réservation d'appartements.
En bref, un utilisateur peut être rattaché à plusieurs appartements et vice versa.
La relation "user" / "estate" est de type n:n et implique donc une table de jointure.
J'ai construit ma base de donnée avec PHPMyAdmin et ai entre autres ces trois tables:
- "user" et "estate" dont chacune a comme clef primaire un entier en autoincrément
- "estateUser" avec comme clef primaire la composition deux clefs étrangères "idUser" et "idAppart".
J'ai commencé par envisager une relation "manyToMany" dans le schema yaml ..
Seulement j'avais besoin d'ajouter plusieurs champs supplémentaires dans ma table de liaison.
J'ai pu lire que lorsque une relation manyToMany nécessite ne serait-ce qu'un champ supplémentaire, il ne s'agit plus vraiment d'une relation manyToMany et la table de jointure doit être modélisée comme une entité à part entière.
La relation est scindée en 4 relations:
1- oneToMany user => estateUser
2- oneToMany estate=> estateUser
---
3- manyToOne estateUser => user
4- manyToOne estateUser => estate
Je ne suis pas parvenu à générer le yaml avec les outils de Doctrine en ligne de commande pour obtenir cette troisième entité
J'ai essayé notemment :
app/console doctrine:mapping:convert yml ./src/AppBundle/Ressources/config/doctrine --from-database --force
app/console doctrine:mapping:import AppBundle yml
Doctrine considère systématiquement la relation comme une "manyToMany" et ne créé donc pas de fichier estateUser.orm.yml
En recherchant un peu, je suis tombé sur cet article de la documentation:
Dans l'exemple il n'y a que le code décoré d'annotations, et pas la version YAML.
Je souhaite donc pouvoir générer les fichiers de schéma depuis la base.
Ou si ce n'est pas possible à cause de la nature de la relation, juste savoir que mettre dans les fichiers yml pour chacunes des 3 entités, en conservant le principe de clef primaire combinée avec les 2 clefs étrangères pour l'entité "estateUser".
Et enfin pouvoir générer mes classes d'entités et leurs classes de reporitory.
Voici mon ébauche des fichiers schema yml à la main:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
Estate:
type: entity
table: estate
id:
id:
type: integer
nullable: false
unsigned: false
id: true
generator:
strategy: IDENTITY
fields:
label:
type: string
nullable: false
length: 30
fixed: false
oneToMany:
features:
targetEntity: Estateuser
mappedBy: estate
lifecycleCallbacks: { } |
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 39 40 41 42 43 44 45 46 47 48
|
User:
type: entity
table: user
id:
id:
type: integer
nullable: false
unsigned: false
id: true
generator:
strategy: IDENTITY
fields:
name:
type: string
nullable: false
length: 70
fixed: false
lastname:
type: string
nullable: false
length: 70
fixed: false
password:
type: string
nullable: false
length: 70
fixed: false
email:
type: string
nullable: false
length: 70
fixed: false
created:
type: datetime
nullable: false
modified:
type: datetime
nullable: false
deleted:
type: datetime
nullable: true
oneToMany:
oneToMany:
features:
targetEntity: Estateuser
mappedBy: users
lifecycleCallbacks: { } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
Estateuser:
type: entity
table: estateUser
id:
idUser:
associationKey: true
idEstate:
associationKey: true
manyToOne:
users:
targetEntity: User
joinColumn:
name: idUser
referencedColumnName: id
manyToOne:
estates:
targetEntity: Estate
joinColumn:
name: idEstate
referencedColumnName: id |
Je sèche et ça commence à être chronophage .. Quelqu'un sairait-il m'aider ?
Un coup de main serait vraiment appréciable, merci d'avance !
Partager