如何在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 |
+---------+-----------+--------------+-------------+
我想要这样的网格:
我已经创建了两个表的模型,但它们只显示单个模型网格视图。
所以,我没有办法做到这一点。任何帮助都会非常值得赞赏。
答案 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
),
),
));
?>
您可能会注意到,使用这种基于数组的语法,您可以声明非常通用的列。
我希望你觉得这篇文章很有帮助。