Как удалить избыточность столбцов из sfDoctrineGuard, sfForkedDoctrineApply и MyProfile? - PullRequest
0 голосов
/ 25 мая 2011

Я использовал sfDoctrineGuard и пользовательскую таблицу MyProfile для управления пользователями в моем проекте Symfony.Желая реализовать функцию сброса пароля в моем проекте, я решил установить sfForkedDoctrineApply.Я отредактировал схему для MyProfile следующим образом:

MyProfile:
  ...
  inheritance:
    type: column_aggregation
    extends: sfGuardUserProfile

Однако я с ужасом обнаружил, что таблица sfGuardUserProfile, созданная sfForkedDoctrineApply, разделяет столбцы с таблицей sfGuardUser, созданной sfDoctrineGuard (а именно столбцы для имени и фамилии).

Насколько я понимаю, изменение схемы с помощью плагинов является плохим тоном, поскольку будущие обновления плагинов могут перезаписать эти изменения.Следовательно, хорошей практикой является создание таблицы MyProfile и отношения 1: 1 с sfGuardUser.

Могу ли я удалить избыточность этого столбца, не изменяя схему плагинов и, таким образом, предотвращая разрушение моего проекта будущими обновлениями?Черт возьми, я думаю, что было бы лучше иметь в MyProfile столбцы first_name и last_name вместо sfGuardUser!

Если у кого-то есть идея получше, или если я что-то сформулировал неправильно, пожалуйста, дайте мне знать!

Спасибо всем.


Вот три файла схемы yml для справки:

MyProfile:
  columns:
     ...
  relations:
    User:
      class: sfGuardUser
      local: user_id
      foreign: id
      type: one
      foreignType: one
      foreignAlias: Profile
  inheritance:
    type: column_aggregation
    extends: sfGuardUserProfile

sfGuardUserProfile:
  actAs:
    Timestampable: ~
  columns:
    user_id:
      type: integer
      notnull: true
      unique: true
    email_new:
      type: string(255)
      unique: true
    firstname:
      type: string(255)
    lastname:
      type: string(255)
    validate_at:
      type: timestamp
    validate:
      type: string(33)
  relations:
    User:
      class: sfGuardUser
      foreign: id
      local: user_id
      type: one
      onDelete: cascade
      foreignType: one
      foreignAlias: Profile
  indexes:
    validate:
      fields: [validate]

sfGuardUser:
  actAs: [Timestampable]
  columns:
    first_name: string(255)
    last_name: string(255)
    email_address:
      type: string(255)
      notnull: true
      unique: true
    username:
      type: string(128)
      notnull: true
      unique: true
    algorithm:
      type: string(128)
      default: sha1
      notnull: true
    salt: string(128)
    password: string(128)
    is_active:
      type: boolean
      default: 1
    is_super_admin:
      type: boolean
      default: false
    last_login:
      type: timestamp
  indexes:
    is_active_idx:
      fields: [is_active]
  relations:
    ...
...