Bonjour,
Je planche sur un problème depuis 2 jours et n'ai plus vraiment les idées claires :P (et Symfony ce n'est pas vraiment ma tasse de thé)
J'ai 4 tables (dont 2 d'associations sur les 2 premières tables, pour des usages différents)
pg_product(id, name, slug, description, price, vat, enabled, role, created_at, updated_at, deleted_at)
pg_sport(id, name, slug, description)
pg_sport_accessory(sport#, product#) ==> propose des produits en option lors d'un formulaire de réservation
pg_product_sport(sport#, product#) ==> association d'un produit à un sport pour la boutique en ligne
Ce que je fais
J'ai créé mon fichier de migration SQL pour la création d'une table Slide. Puis l'ai exécuté.
Lorsque je tente de générer mon fichier de configuration doctrine en yml, j'ai une erreur sur les tables ci-dessus.
php bin/console doctrine:mapping:import "FrontBundle" yml --filter=Slide
J'obtiens l'erreur suivante :
In MappingException.php line 381:
Property "sport" in "PgProduct" was already declared, but it must be declared only once
Ce que j'obtiens
J'ai décortiré/testé/trituré mes fichiers de configuration yml de doctrine dans tous les sens sans résultat.
Product.orm.yml
FrontBundle\Entity\Product:
type: entity
table: pg_product
repositoryClass: FrontBundle\Entity\ProductRepository
uniqueConstraints:
slug:
columns:
- slug
id:
id:
type: integer
nullable: false
options:
unsigned: true
id: true
generator:
strategy: IDENTITY
gedmo:
soft_deleteable:
field_name: deletedAt
time_aware: true
hard_delete: false
fields:
name:
type: string
nullable: false
length: 255
options:
fixed: false
slug:
type: string
nullable: true
length: 255
options:
fixed: false
gedmo:
slug:
fields:
- name
description:
type: text
nullable: true
length: 65535
options:
fixed: false
price:
type: decimal
nullable: false
precision: 6
scale: 2
options:
default: '0.00'
vat:
type: decimal
nullable: false
precision: 4
scale: 2
options:
default: '20.00'
enabled:
type: boolean
nullable: false
options:
default: false
role:
type: string
nullable: false
length: 50
options:
fixed: 'product'
createdAt:
type: datetime
gedmo:
timestampable:
on: create
updatedAt:
type: datetime
gedmo:
timestampable:
on: update
deletedAt:
type: datetime
nullable: true
oneToMany:
product_images:
targetEntity: ProductImage
mappedBy: product
cascade: ["persist", "remove"]
manyToMany:
accessories:
targetEntity: Sport
joinTable:
name: pg_product_sport
joinColumns:
product:
referencedColumnName: id
inverseJoinColumns:
sport:
referencedColumnName: id
sports:
targetEntity: Sport
joinTable:
name: pg_product_sport
joinColumns:
product:
referencedColumnName: id
inverseJoinColumns:
sport:
referencedColumnName: id
lifecycleCallbacks: { }
Sport.orm.yml
FrontBundle\Entity\Sport:
type: entity
table: pg_sport
id:
id:
type: integer
nullable: false
options:
unsigned: true
id: true
generator:
strategy: IDENTITY
fields:
name:
type: string
nullable: false
length: 250
options:
fixed: false
slug:
type: string
nullable: false
length: 250
options:
fixed: false
description:
type: text
nullable: true
length: 65535
options:
fixed: false
oneToMany:
grounds:
targetEntity: Ground
mappedBy: sport
bookings:
targetEntity: Booking
mappedBy: sport
cards:
targetEntity: Card
mappedBy: sport
manyToMany:
products:
targetEntity: Product
joinTable:
name: pg_sport_accessory
joinColumns:
sport:
referencedColumnName: id
inverseJoinColumns:
product:
referencedColumnName: id
shopProducts:
targetEntity: Product
joinTable:
name: pg_product_sport
joinColumns:
sport:
referencedColumnName: id
inverseJoinColumns:
product:
referencedColumnName: id
lifecycleCallbacks: { }
Il y a quelque chose qui m'échappe, mais je ne vois vraiment pas quoi...