2011-12-16 14 views
1

YiiフレームワークでマルチモデルCGridViewを作成する方法。私はYiiのドキュメントを検索しました。 user_masterマルチモデルを作成する方法CGridView

+---------+----------+-------------+-------------+ 
| user_id | name  | email  | active  | 
| 1  | Darshit | [email protected] | true  | 
| 2  | Obed  | [email protected] | true  | 
| 3  | abmed | [email protected] | true  | 
| 4  | clutch | [email protected] | true  | 
| 5  | sirisb | [email protected] | true  | 
+---------+----------+-------------+-------------+ 

表:friend_master

+---------+-----------+--------------+-------------+ 
| user_id | friend_id | date_created | is_deleted | 
+---------+-----------+--------------+-------------+  
| 1  | 2  | 2011-12-14 | false  | 
| 1  | 5  | 2011-12-14 | false  | 
| 3  | 5  | 2011-12-14 | false  | 
| 2  | 4  | 2011-12-14 | false  | 
| 1  | 3  | 2011-12-14 | false  | 
| 5  | 2  | 2011-12-14 | false  | 
+---------+-----------+--------------+-------------+ 

私はこのようなグリッドをしたい:

以下

は私が

表を必要なものの例のための2つのテーブルです

Desired Result

私は両方のテーブルを作成してモデル化しましたが、単一のモデルグリッドビューしか表示しません。

だから、私はそれをする方法を得ていない。どんな助けも高い評価を受けます。

答えて

4

マルチモデルのグリッドビューは必要ありません。必要に応じてグリッドには、1つのモデルuser_masterの要素が表示されます。プロパティ "Friends"は実際にはそのモデルに属します。これは、user_masterテーブルの個々のインスタンスごとに関連する値であるためです。したがって、実際には、user_masterテーブルの余分な列としてプロパティ "Friends"を想像することができます。その行をテーブルに追加する必要はなく、モデルのプロパティとして宣言するだけです。 user_masterモデルの「関係」関数によって返される配列に、次の行を追加します。

'FriendsCount'=> array(self::STAT, 'friend_master', 'user_id'), 

あなたが、これはここでどのように機能するかについての詳細を読むことができます:http://www.yiiframework.com/doc/api/1.1/CActiveRecord/#relations-detail

簡単に説明すると、STATタイプのリレーションは単にモデルの統計値を取得します。この特定のケースでは、user_masterモデルの各インスタンスに関連する友人の数だけをカウントします。

ここで、CGridView定義内に、表示する3つの列を宣言する必要があります。これは 'columns'配列の内部で行われます。もちろん、 'user_id'と 'name'は表示されているモデルの明示的に宣言されたプロパティとして認識されるので、それらを気にする必要はありません。しかし、「Friends」列では、表示したい値を明示的に指定する必要があります。これは、単純に配列を使用して行われます:あなたはこのアレイベースの構文を使用して、あなたは非常に汎用性の高いカラムを宣言することができることに気づくかもしれ

<?php $this->widget('zii.widgets.grid.CGridView', array(
     ... 
    ... 
    'columns'=>array(
     'user_id', 
     'name', 
      array(
       'class'=>'CDataColumn', 
      'name'=>'Friends', 
      'value'=>'$data->FriendsCount', //The FriendsCount relation we declared        
      ), 
    ), 
)); 
?> 

この投稿を参考にしてください。

+0

ご回答いただきありがとうございます。私はあなたのソリューションを適用します。アルフレド –

+0

こんにちは、@ Alfredoそれは完全にうまくいった、助けてくれてありがとう。しかし、今私はその列をソートすることはできません。だから、**友達**の列にソートを適用する方法を教えてください。 –

+0

OK。 user_masterモデルのAttributesLabes関数に次の行を追加するだけです: 'FriendCount' => 'Friends'、 そして、 'value'行をgridview宣言から削除してください。最後に、 'name'プロパティの値を 'FriendsCount'に変更します。それは仕事を完了させるべきです。 –

関連する問題