我已经安装了sfGuardPlugin并创建了这个模型:
propel:
sf_guard_user_profile:
_attributes: { phpName: sfGuardUserProfile }
id: ~
user_id: { type: integer, foreignTable: sf_guard_user, foreignReference: id, required: true, onDelete: cascade }
name: varchar(50)
正如这里所写,http://www.propelorm.org/wiki/Documentation/1.4/Relationships(参见“一对一关系”),假设symfony生成函数sfGuardUser->getSfGuardUserProfile()
和sfGuardUserProfile->getSfGuardUser()
,但我有这样的代码:
// this works
$c1 = new Criteria();
$elements = sfGuardUserProfilePeer::doSelect($c1);
var_dump($elements[0]->getSfGuardUser());
// this doesn't work
$c2 = new Criteria();
$elements = sfGuardUserPeer::doSelect($c2);
var_dump($elements[0]->getSfGuardUserProfile());
它不起作用。它说:
调用未定义的方法 BasesfGuardUser :: getSfGuardUserProfile
sf 1.4 / propel 1.4
哈维尔
答案 0 :(得分:2)
sfGuardProfile中的user_id字段应该是主键,因此propel会将其视为一对一关系。
propel:
sf_guard_user_profile:
_attributes: { phpName: sfGuardUserProfile }
user_id: { type: integer, foreignTable: sf_guard_user, foreignReference: id, required: true, onDelete: cascade, primary: true }
name: varchar(50)
由于你的sfGuardUserProfile是与你的sfGuardUser的一对多关系,所以getSfGuardUserProfile()方法不存在,确实存在的方法是sfGuardUserProfiles()(唯一的区别是方法中的's') name,它将生成一个用户配置文件数组)
ps:抱歉我的英语不好:D