0

プロジェクト モデルの Yii の管理者ビューに取り組んでいます。

フィルター付きの列の 1 つは、プロジェクトのユーザー (所有者) です。

私はこのようなことができます:

'filter'=> CHtml::dropDownList('Project[user_id]', $model->user_id,
    CHtml::listData(User::model()->orderAsc()->findAll(),
    'id','username'),array('empty'=>'(select)')),

これにより、user テーブル内のすべてのユーザーのリストが得られますが、プロジェクトを所有する個別のユーザーをプルするものを作成したいと考えています (200 人のユーザーがいますが、プロジェクトを作成する傾向があるのはほんの一握りです)。

プロジェクトとユーザーは次の方法で関連付けられています。

'user' => array(self::BELONGS_TO, 'User', 'user_id')

findAll() メソッドで一連のオプションを試しましたが、どれも機能しませんでした。スコープで何かをしようとしていません。

これまでのところ、私はこれを試しました:

'filter'=> CHtml::dropDownList('Project[user_id]', $model->user_id,
    CHtml::listData(Project::model()->with('user')->ownerUsernames()->
    findAll(), 'id','username'),array('empty'=>'(select)')),

私のスコープは次のように定義されています。

'ownerUsernames' => array(
    'with' => 'user.username',
    'select' => 'user.username',
    'distinct' => true,
),

上記の繰り返しを何度も試しましたが、カウント 'with'=>'username' 'select'=>'username' などを失いましたが、うまく動作しないようです。

Project::model() を $model に置き換えようとしましたが、何か関係があるのではないかと思ったからです。

どんなアイデアでも大歓迎です。Yii にとっては非常に新しいものですが、これは Yii でできることのようです。

4

2 に答える 2

0

実際には、それを達成するために多くのことを行うことができますが、時間がかかるため、一部の方法は適切ではありません。私はこの問題に取り組むことを好みます

  1. user_project という名前の DB に、属性
    ID
    user_id (fk からユーザー テーブル)
    project_id (fk からプロジェクト テーブル) を持つテーブルを作成します。
  2. プロジェクトを作成するときは、user_project にも特定のフィールドを設定します。
  3. そのモデルを作成すると、その中に関係が表示されます。次のような関数を作成します
public function getName()
{
return user->name;//here i have assumed that the relation name is user
}
  • このテーブルを次のようにクエリします
$user=UserProject::mode::findAll();
$list=CHtml::listData($user,'user_id','name');

このリストを使用して、dropDownList に入力します。この方法の利点は、ユーザー テーブルのすべてのユーザーに対してクエリを実行する必要がないことです。

于 2014-02-28T20:57:48.570 に答える