0

tl;dr: Symfony admin ジェネレーターのリスト ビューに 2 つの異なるテーブルのデータを表示する必要があります (できれば 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

現在、テーブルは client_id であり、sfGuardUser テーブルの id 列への外部キーです。 (はい、DB アクセシビリティのためだけにそこに id 列が必要であることはわかっています。後でさらに追加されます)

Symfony admin ジェネレーターを使用してプロファイル テーブルの管理者を作成しました。管理者のリスト ビューを次のようにしたいと思います ( 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 admin ジェネレーターにリスト ビューを表示させる方法に関するアイデアはありますか? または、代わりに、別のモデルからプルする方法は?

4

1 に答える 1

2

私は自分の質問に答えました!

クラスのjoinメソッドをより理解しやすいものに変更しました(この役立つリンクsfGuardUserProfileTableのおかげで):

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 に答える