Как объявить наследование доктрин в файле fixes.yml?

У меня проблема с наследованием Doctrine в моем fixtures.yml файле Symfony.

Представьте себе следующее:

NewsAuthor:
  inheritance:
    extends: sfGuardUser
    type:    simple

Теперь я хочу объявить пользователя защиты по умолчанию User_admin файла фикстур sfDoctrineGuardPlugin автор первой фиктивной статьи моей модели новостей. Но как это сделать?

Я пробовал следующее:

NewsAuthor:
  AuthorAdmin:
    sfGuardUser: User_admin

Но затем я получаю эту ошибку задачи doctrine:data-load:

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

Я использую Symfony 1.4.8 с Doctrine 1.2.3.

Спасибо в ожидании,
Лемми


person Johnny    schedule 03.10.2010    source источник


Ответы (1)


Вы неправильно понимаете, как работает наследование Doctrine. При простом наследовании NewsAuthor не будет ссылаться на sfGuardUser, у него будут все столбцы и отношения, которые есть у sfGuardUser, а также те, которые вы определяете. Наследование здесь плохой подход.

Вместо этого вы хотите, чтобы NewsAuthor имел ссылку на sfGuardUser. Ваша схема в этом случае будет выглядеть так:

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

Тогда ваши приборы будут выглядеть так же, как и раньше:

NewsAuthor:
  AuthorAdmin:
    sfGuardUser: User_admin

Затем вы можете получить доступ к объекту sfGuardUser в объекте NewsAuthor через $newsAuthor->User, аналогичным образом вы можете получить доступ к NewsAuthor в экземпляре sfGuardUser через $user->NewsAuthor.

person Jeremy Kauffman    schedule 04.10.2010
comment
Спасибо за это хорошо объясненное решение. Но я не понимаю, для чего Наследование? - person Johnny; 04.10.2010
comment
Это зависит от типа наследования. Я использую конкретное наследование, когда хочу использовать методы схожих типов, которые должны находиться в разных таблицах. Я использую column_aggregation, когда похожие типы будут извлекаться одновременно. - person Jeremy Kauffman; 04.10.2010