0

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

现在表是 sfGuardUser 表上 id 列的 client_id 和外键。 (是的,我知道我需要一个 id 列,只是为了数据库可访问性,以后还会有更多)

我使用 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 对我有帮助,但我的表格方法 (in 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 管理生成器显示基于连接的列表视图的任何想法?或者,或者,如何从单独的模型中提取?

4

1 回答 1

2

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

我将sfGuardUserProfileTable课堂上的 join 方法更改为我可以更好理解的方法(感谢这个有用的链接):

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;
  }

谢谢你成为我的橡皮鸭,所以!

于 2011-07-27T21:38:05.337 回答