Symfony管理生成器中列表视图中的自定义列

时间:2011-07-27 21:13:07

标签: doctrine symfony-1.4 admin-generator

tl; dr:我需要在Symfony管理生成器的列表视图中显示来自两个不同表的数据(最好通过JOIN语句)

我正在使用sfDoctrineGuardPlugin来管理我应用的用户。每个用户也有自己的个人资料,可以填写。配置文件表的架构(schema.yml)如下所示:

sfGuardUserProfile:
  connection: doctrine
  tableName: sf_guard_user_profile
  columns:
    sf_guard_user_id: integer(8)
    client_id: string(128)
  relations:
    sfGuardUser:
      local: sf_guard_user_id
      foreign: id
      foreignType: one
      onDelete: CASCADE

现在,table是一个client_id,是sfGuardUser表上id列的外键。 (是的,我知道我需要一个id列,仅用于DB可访问性,稍后会有更多内容)

我使用Symfony管理生成器为我的个人资料表创建了一个管理员。我希望管理员的列表视图看起来像这样(generator.yml):

config:
  ...
  list:
    title:   Clients
    display: [client_id, sf_guard_user_id, username]
    table_method: retrieveProfileList

但是,我的用户名列不起作用,我收到了Doctrine_Record_UnkownPropertyException

Unknown record property / related component "username" on "sfGuardUserProfile"

我希望自定义table_method来填充列表视图的数据对我有所帮助,但我的表方法(在lib/model/sfGuardUserProfileTable.class.php中)似乎没有帮助。我在Symfony Book中跟随了一个示例,这是方法:

public static function retrieveProfileList(Doctrine_Query $q)
{
  $rootAlias = $q->getRootAlias();

  $q->leftJoin($rootAlias . '.sfGuardUser id');

  return $q;
}

有关如何让Symfony管理生成器显示基于连接的列表视图的任何想法?或者,如何从单独的模型中拉出来?

1 个答案:

答案 0 :(得分:2)

我已经回答了我自己的问题!

我将sfGuardUserProfileTable课程上的联接方法更改为我可以更好理解的内容(感谢this有用的链接):

public static function retrieveProfileList(Doctrine_Query $q)
{
  return $q->select('r.*, u.username')
          ->leftJoin('r.sfGuardUser u');
}

getUsername模型类

中使用sfGuardUserProfile方法
  public function getUsername()
  {
      return $this->sfGuardUser->username;
  }

谢谢你是我的橡皮鸭,所以!