与sfGuardPlugin一对一的关系

时间:2013-06-26 10:00:04

标签: symfony-1.4

我在schema.yml中添加了以下类(我使用的是symfony 1.4):

LoginKey:
  connection: doctrine
  tableName: sos_login_key
  options:
    type: InnoDB
    collate: utf8_unicode_ci
    charset: utf8
  columns:
    id:
      type: integer(8)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
      notnull: true
    user_id:
      notnull: true
      type: integer(8)
    keycode:
      notnull: true
      type: string(255)
    expires_at:
      type: datetime
      default: null
  relations:
    sfGuardUser:
      local: user_id
      foreign: id
      type: one

sfGuardUser:
  relations:
    LoginKey:
      local: id
      foreign: user_id
      type: one

现在,当我尝试在查询中的那些表上执行JOIN(sfGuardUser innerJoin LoginKey)时,LoginKey记录不会被充实;当我尝试访问LoginKey时,我看到每行都有一个新的查询。 我该怎么办?

1 个答案:

答案 0 :(得分:1)

关系的拥有方是LoginKey所以你必须只在那里定义关系。添加foreignType: one并移除sfGuardUser部分。所以正确的架构看起来像这样:

LoginKey:
  columns:
    user_id:
      type: integer
      notnull: true
    keycode:
      type: string(255)
      notnull: true
    expires_at:
      type: datetime
      default: null
  relations:
    sfGuardUser:
      local: user_id
      foreign: id
      type: one
      foreignType: one

作为旁注,如果你想扩展插件的模式,你必须使用package参数(但在你的情况下,它不是必需的,因为不需要将新字段添加到{{1 }})

sfGuardUser

如果不使用此类,则会将类生成到错误的位置并与其他类冲突,因此您必须删除这些类。尝试sfGuardUser: package: sfDoctrineGuardPlugin.lib.model.doctrine relations:... 并检查是否已从php symfony doctrine:cleansfGuardUser删除所有未使用的类(lib/model)。