0

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

我的服务器型号代码:

   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 个,但一台服务器有很多 ips!我怎么能做到这一点?

4

2 回答 2

1

改变关系!

      'ipmodel'=>array(self::HAS_MANY, 'IpManager', 'server_id')
于 2013-09-11T11:18:54.810 回答
0

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

关系:

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

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

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

解释:

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

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

于 2015-11-26T04:44:49.693 回答