我正在尝试在gridview
中显示我的数据并且正在编写以下查询,我尝试使用CDBCriteria
编写,
//query
SELECT user. * , jobs. * , COUNT( jobs.user_id )
FROM user
INNER JOIN jobs ON user.id = jobs.user_id
GROUP BY user.id
我尝试过以下内容:
$criteria = new CDbCriteria;
$criteria->select ='user.*,jobs.*';
$criteria->select ='COUNT(jobs.user_id)';
$criteria->select ='user';
$criteria->join ='INNER JOIN jobs ON user.id = jobs.user_id';
$criteria->group ='user.id';
return new CActiveDataProvider('manageemployers', array(
'criteria'=>$criteria,
我的观点有以下代码。
<?php
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' =>$model->search(),
// 'filter' => $model,
'columns' => array(
array(
'name' => ' Employer ID',
'type' => 'raw',
'value' => 'CHtml::encode($data->id)',
'htmlOptions' => array('style'=>'width:90px;','class'=>'zzz'),
// 'filter'=>'false' /* for hiding filter boxes */
[...]
?>
我的控制器
public function actionManageEmployers() {
$user_id = Yii::app()->session['user_id'];
if (Yii::app()->user->getId() === null)
$this->redirect(array('site/login'));
$model = new ManageEmployers();
$model->user_id = $user_id;
$this->render('manageemployers', array('model' => $model,
));
}
但它不起作用。请帮我解决这个问题。谢谢!
答案 0 :(得分:0)
修改强>
所以现在我能够理解你的问题,我试着用它解决这个问题。
我认为我有解决方案,您不需要像search()
那样获取数据。你可以使用关系和其他东西来获取你的数据。
首先,我会像这样添加你的用户模型的关系:
'jobs' => array(self::HAS_MANY, 'Jobs', 'user_id')
之后,您可以使用$model->jobs
然后您需要撤消search()
- 函数的更改。我的意思是它必须是这样的:
public function search()
{
$criteria=new CDbCriteria;
$criteria->compare('attribute',$this->attribute);
//this is just an example ^
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
更改操作:
$model = new ManageEmployers();
到此:
$model = new ManageEmployers("search");
视图中的更改:
将这样的内容添加到colums
数组:
array(
'name' => 'Total Jobs Posted',
'value' => 'count($data->jobs)',
'htmlOptions' => array('style'=>'width:90px;','class'=>'zzz'),
)
答案 1 :(得分:0)
如果您设置了表关系,那么在您的用户模型(指您的用户表)中尝试编写CDbCriteria
,如下所示:
$criteria = new CDbCriteria();
$criteria->with = array('jobs' => array('joinType' => 'STRAIGHT_JOIN'));
$criteria->together = true;
$criteria->addCondition('id = jobs.user_id');
return new CActiveDataProvider('manageemployers', array(
'criteria' => $criteria
));