在sf1.4 / propel中一对一的关系

时间:2011-01-17 16:02:00

标签: symfony1 relationship propel

我已经安装了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

哈维尔

1 个答案:

答案 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