0

我在我的 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

现在,当我尝试在查询(sfGuardUser innerJoin LoginKey)中对这些表进行 JOIN 时,LoginKey 记录不会得到水合;当我尝试访问 LoginKey 时,我看到每行都完成了一个新查询。我应该怎么办?

4

1 回答 1

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参数(但在您的情况下,它不是必需的,因为不必添加新字段sfGuardUser

sfGuardUser:
  package:
    sfDoctrineGuardPlugin.lib.model.doctrine
  relations:...

不使用时,这些类将生成到错误的位置并与其他类发生冲突,因此您必须删除这些类。尝试检查它是否从和中php symfony doctrine:clean删除了所有未使用的类 ( sfGuardUser) 。lib/modellib/model/base

于 2013-06-26T10:39:51.150 回答