我是Symfony和Doctrine的新手,正在编写一个Web应用程序。我将sfDoctrineGuardPlugin添加到我的项目中。当我打开插件的schema.yml文件时,我看到了:
sfGuardUser:
actAs: [Timestampable]
columns:
first_name: string(255)
last_name: string(255)
email_address:
type: string(255)
notnull: true
unique: true
username:
type: string(128)
notnull: true
unique: true
algorithm:
type: string(128)
default: sha1
notnull: true
salt: string(128)
password: string(128)
is_guest:
type: boolean
default: 0
is_active:
type: boolean
default: 1
is_super_admin:
type: boolean
default: false
last_login:
type: timestamp
indexes:
is_active_idx:
fields: [is_active]
relations:
Groups:
class: sfGuardGroup
local: user_id
foreign: group_id
refClass: sfGuardUserGroup
foreignAlias: Users
Permissions:
class: sfGuardPermission
local: user_id
foreign: permission_id
refClass: sfGuardUserPermission
foreignAlias: Users
此架构是否生成带有主键的表(如果是,我该如何访问它)?我已经在线查看,大多数覆盖sfGuardUser架构的页面都显示了一个作为主键的id列。我错过了什么?感谢。
答案 0 :(得分:3)
是的,它是id
,以sfGuardUser u访问 - > u.id,如......
$user = Doctrine::getTable('sfGuardUser')->findOneById(55);
...或
$q = Doctrine_Query::create()
->select('u.*')
->from('sfGuardUser u')
->where('u.id = ?', 55);
$q->execute();
我认为在Doctrine文档中的某处,如果没有在YAML文件中声明,那么Doctrine会自动生成一个“id”主键。它曾经在sfGuardPlugin架构中被声明为explicity,但是从Symfony 1.4.8开始(我认为),它只是没有写。
需要注意的一点是,架构中的其他位置,您需要确保为外键关系的另一端声明相同的数字类型,否则会引发错误。我认为你需要的只是type: integer
。
答案 1 :(得分:2)
如果没有给出主键,则doctrine将创建一个类型为bigint且带有主键的id字段。