2010-10-03 3 views
1

J'ai un problème avec l'héritage de Doctrine dans mon fichier fixtures.yml de Symfony.Comment déclarer l'héritage Doctrines dans un fichier fixtures.yml?

Imaginez ce qui suit:

NewsAuthor: 
    inheritance: 
    extends: sfGuardUser 
    type: simple

Maintenant, je veux déclarer l'utilisateur de garde par défaut User_admin du fichier accessoires du sfDoctrineGuardPlugin être l'auteur du premier article fictif de mon modèle Nouvelles. Mais comment faire cela?

J'ai essayé les éléments suivants:

NewsAuthor: 
    AuthorAdmin: 
    sfGuardUser: User_admin

Mais je reçois cette erreur de la tâche doctrine:data-load:

Unknown record property/related component "sfguarduser" on "NewsAuthor"

J'utilise Symfony 1.4.8 avec la doctrine 1.2.3.

Merci d'avance,
Lemmi

Répondre

1

Vous êtes mal compris comment l'héritage de la doctrine fonctionne. Sous l'héritage simple, NewsAuthor n'aurait pas une référence à sfGuardUser, il aurait toutes les colonnes et relations que sfGuardUser a plus celles que vous définissez. L'héritage est une mauvaise approche ici. A la place, vous voulez qu'un NewsAuthor fasse référence à sfGuardUser. Votre schéma dans ce cas ressemblerait à ceci:

NewsAuthor: 
    columns: 
    user_id: 
     type: integer(4) 
     notnull: true 
     unique: true #if one-to-one correspondence 
    relations: 
    User: 
     class: sfGuardUser 
     local: user_id 
     foreignType: one 

Vos appareils seraient alors regarder comme avant:

NewsAuthor: 
    AuthorAdmin: 
    sfGuardUser: User_admin 

Vous pouvez ensuite accéder à l'objet sfGuardUser sur un objet NewsAuthor via $newsAuthor->User, de même, vous peut accéder à NewsAuthor sur une instance sfGuardUser via $user->NewsAuthor.

+0

Merci pour cette solution bien expliquée. Mais je ne comprends pas à quoi sert l'héritage? – Johnny

+0

Cela dépend du type d'héritage. J'utilise l'héritage concret lorsque je veux partager des méthodes entre des types similaires qui doivent être dans des tables différentes. J'utilise column_agrégation lorsque les types similaires seront récupérés simultanément. –

Questions connexes