我在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时,我看到每行都有一个新的查询。 我该怎么办?
答案 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:clean
和sfGuardUser
删除所有未使用的类(lib/model
)。