schema.yml使用sfDoctrineGuardPlugin

时间:2010-09-14 15:12:57

标签: symfony1 doctrine sfdoctrineguard

我正在构建一个schema.yml,我正在尝试将外键约束添加到表sf_guard_user。

但是,当我做doctrine:insert-sql(edit:doctrine:build --all)时,我的表和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 个答案:

答案 0 :(得分:2)

这个有效:

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: trueprimary: false

答案 1 :(得分:1)

你也应该重建模型和sql。尝试运行:

symfony doctrine:build --all

这将破坏所有现有数据。如果您不想这样,则必须编写迁移。

答案 2 :(得分:1)

类名称必须与在架构文件中打开相应表时指定的名称相同。

因此,例如,您正在使用:

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