如何创建多模型CGridView

时间:2011-12-16 14:28:09

标签: php gridview yii

如何在Yii框架中创建多模型CGridView。我搜索了Yii的文档。

以下是我需要的两个表格

表: user_master

+---------+----------+-------------+-------------+
| user_id | name     | email       | active      |  
|   1     | Darshit  | abc@xyz.com | true        |  
|   2     | Obed     | abc@xyz.com | true        |  
|   3     | abmed    | abc@xyz.com | true        |  
|   4     | clutch   | abc@xyz.com | true        |  
|   5     | sirisb   | abc@xyz.com | 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       |  
+---------+-----------+--------------+-------------+  

我想要这样的网格:

Desired Result

我已经创建了两个表的模型,但它们只显示单个模型网格视图。

所以,我没有办法做到这一点。任何帮助都会非常值得赞赏。

1 个答案:

答案 0 :(得分:4)

看起来你不需要多模型gridview。您根据需要提供的网格仅显示一个模型user_master的元素。属性“Friends”实际上属于该模型,因为它是与user_master表的每个特定实例相关的值。因此,您可以将属性“Friends”想象为user_master表中的额外列。您不需要将该行添加到表中,只需将其声明为模型中的属性即可。将以下行添加到user_master模型的'relations'函数返回的数组中:

'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'将被识别为正在显示的模型的显式声明属性,因此我们不需要关心它们。但是对于“朋友”列,您可能需要明确指定我们想要显示的值。这只需使用数组即可完成:

<?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                              
             ),
    ),
)); 
?>

您可能会注意到,使用这种基于数组的语法,您可以声明非常通用的列。

我希望你觉得这篇文章很有帮助。

相关问题