在 Yii 网格视图中显示来自两个模型的计数数据


Show count data in Yii Gridview from two models

我有 2 个表,服务器和 ip,在 ip 表中我正在保存server_id .现在我想在服务器列表页面上显示与一台服务器相关的总共 IP 数?

我的服务器型号代码:

   class Server extends CActiveRecord {
        public function relations(){
     return array('ipmodel'=>array(self::BELONGS_TO, 'IpManager', 'server_id'),
        );
       }
     }

我的CGridView代码:

     array( 
        'header' => 'IP Count',
        'value' => 'count($data->ipmodel)',
     ),

它只显示 1,但一台服务器有这么多 ip!我该怎么做?

更改关系!

      'ipmodel'=>array(self::HAS_MANY, 'IpManager', 'server_id')

最好的方法是使用 Yii 框架的内置STAT关系:

关系:

'ipmodelcount'=>array(self::STAT, 'IpManager', 'server_id')

在网格视图中直接使用它:

array( 
  'header' => 'IP Count',
  'value' => '$data->ipmodelcount',
),

解释:

为什么要使用STAT关系进行计数?

HAS_MANY将加载所有相关模型的数据STAT同时在服务器上运行相关数据的关系运行计数查询。因此,使用 STAT 将花费更少的执行时间来提供所需的结果。