Cartographie de l'Association avec mappé de la superclasse
Dans mon vendeur bundle, j'ai 2 mappé superclasse : BaseSite et BaseSection (abstraites).
Dans mon bundle d'application, j'ai 2 entités qui s'étend le 2 mappé de la superclasse.
Tout fonctionne jusqu'à présent: j'ai accès aux champs définis dans les super-classes et je peux en ajouter de nouvelles dans mon bundle d'application si nécessaire.
Le problème est quand je suis en train de définir ma cartographie de l'association entre ces entités. (manyToOne entre BaseSection et BaseSite).
Si je le définir dans le BaseSection mappé superclasse, je suis en mesure d'exécuter la commande app/console doctrine:generate:entities AcmeDemoBundle
, mais il ne fonctionne pas quand
J'essaie de créer les tables: (app/console doctrine:schema:update --dump-sql
)
CREATE TABLE Section (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, siteId INT DEFAULT NULL, INDEX IDX_95E06DEFFADB670C (siteId), PRIMARY KEY(id)) ENGINE = InnoDB;
CREATE TABLE Site (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB;
ALTER TABLE Section ADD CONSTRAINT FK_95E06DEFFADB670C FOREIGN KEY (siteId) REFERENCES BaseSite(id) ON DELETE CASCADE
Comme vous pouvez le voir, il essaie de faire référence à la clé étrangère sur une table qui n'existe pas (BaseSite au lieu de Site). Je suppose que c'est parce que le mappé super-classe n'est pas au courant du nom de la table définie dans la demande de l'entité.
Je pourrais définir l'association de cartographie sur l'application des entités au lieu de cela, mais cela voudrait dire que si quelqu'un voulait utiliser mon bundle, il faudrait définir le mappage de lui-même, que je voudrais éviter.
Est-il une autre manière de faire ceci ou peut-être que je suis juste en manque de quelque chose?
Voici mon code:
Vendeur :
Fichier: vendeur\bundles\Acme\DemoBundle\Ressources\config\doctrine\BaseSite.orm.yml
Acme\DemoBundle\Entity\BaseSite:
type: mappedSuperclass
fields:
id:
type: integer
id: true
generator:
strategy: AUTO
name:
type: string
length: 255
nullable: false
//...
Fichier: vendeur\bundles\Acme\DemoBundle\Ressources\config\doctrine\BaseSection.orm.yml
Acme\DemoBundle\Entity\BaseSection:
type: mappedSuperclass
fields:
id:
type: integer
id: true
generator:
strategy: AUTO
name:
type: string
length: 255
nullable: false
//...
manyToOne:
site:
targetEntity: Acme\DemoBundle\Entity\BaseSite
joinColumn:
name: siteId
referencedColumnName: id
onDelete: cascade
Application:
Fichier: src\Application\Acme\DemoBundle\Ressources\config\doctrine\Site.orm.yml
Application\Acme\DemoBundle\Entity\Site:
type: entity
table: Site
Fichier: src\Application\Acme\DemoBundle\Entity\Site.php
<?php
namespace Application\Acme\DemoBundle\Entity;
use Acme\DemoBundle\Entity\BaseSite;
class Site extends BaseSite
{
}
Fichier: src\Application\Acme\DemoBundle\Ressources\config\doctrine\Section.orm.yml
Application\Acme\DemoBundle\Entity\Section:
type: entity
table: Section
Fichier: src\Application\Acme\DemoBundle\Entity\Section.php
<?php
namespace Application\Acme\DemoBundle\Entity;
use Acme\DemoBundle\Entity\BaseSection;
class Section extends BaseSection
{
}
OriginalL'auteur Emilie | 2012-03-26
Vous devez vous connecter pour publier un commentaire.
Après la lecture de la La Doctrine manuel sur l'Héritage de la Cartographie son dit:
Il pourrait être intéressant de regarder à l'héritage de table caractéristiques.
OriginalL'auteur Lee Davis