schema.yml с использованием sfDoctrineGuardPlugin - PullRequest
2 голосов
/ 14 сентября 2010

Я создаю schema.yml и пытаюсь добавить ограничения внешнего ключа в таблицу sf_guard_user.

Но когда я делаю doctrine: insert-sql (edit: doctrine: build -все), ссылки между моими таблицами и sf_guard_user отсутствуют!Я что-то упустил?

Я использую mysql ( InnoDB ) и Symfony 1.4

Вот пример моего schema.yml:

Author:
  connection: doctrine
  tableName: ec_author
  actAs:
    Sluggable:
      fields: [name]
      unique: true
      canUpdate: false
  columns:
    sf_guard_user_id:
      type: integer
      fixed: false
      unsigned: false
      primary: true
      autoincrement: false
    name:
      type: string(30)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    contents:
      type: string()
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
  relations:
      User:
        class: sfGuardUser
        foreignType: one
        local: sf_guard_user_id
        foreign: id

Нет ссылок на sfGuardUser, даже если они описаны в schema.yml: alt text alt text

Ответы [ 3 ]

2 голосов
/ 21 сентября 2010

Этот работает:

Author:
  connection: doctrine
  tableName: ec_author
  actAs:
    Sluggable:
      fields: [name]
      unique: true
      canUpdate: false
  columns:
    sf_guard_user_id:
      type: integer
      fixed: false
      unsigned: false
      primary: false
      autoincrement: false
    name:
      type: string(30)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    contents:
      type: string()
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
  relations:
      User:
        class: sfGuardUser
        foreignType: one
        local: sf_guard_user_id
        foreign: id
        foreignAlias: author

sf_guard_user_id - это внешний ключ, тогда он не может быть первичным ключом.поэтому я изменил primary: true на primary: false.

1 голос
/ 21 сентября 2010

Имя класса должно совпадать с именем, которое вы указали при открытии соответствующей таблицы в файле схемы.

Так, например, вы используете:

relations:
    User:
      class: sfGuardUser
      foreignType: one

имя класса здесь должно соответствовать объявлению таблицы sfGuardUser.Просто убедитесь, что они одинаковы.Иногда он может быть объявлен как sf_guard_user.

Если это нормально, вы можете попробовать добавить еще несколько определений в вашу запись отношений:

relations:
    User:
      class: sfGuardUser
      foreignType: one
      local: sf_guard_user_id
      foreign: sf_guard_user_id
1 голос
/ 15 сентября 2010

Вы должны перестраивать модели и sql.Попробуйте выполнить:

symfony doctrine:build --all

Это приведет к засорению всех существующих данных.Если вы этого не хотите, вам придется написать миграцию.

...