我有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! 我怎么能这样做?
答案 0 :(得分:1)
改变关系!
'ipmodel'=>array(self::HAS_MANY, 'IpManager', 'server_id')
答案 1 :(得分:0)
最好的方法是使用内置的STAT
Yii框架关系:
<强>关联:强>
'ipmodelcount'=>array(self::STAT, 'IpManager', 'server_id')
在网格视图中直接使用它:
array(
'header' => 'IP Count',
'value' => '$data->ipmodelcount',
),
<强>阐释:强>
为什么要使用STAT
关系进行计数?
HAS_MANY
将加载所有相关模型的数据,而STAT
关系运行计数查询服务器上的相关数据。因此,使用STAT
将花费更少的执行时间来提供期望结果。