我有3张桌子
“设置”表的架构如下。
id | name
1 | aaa
2 | bbb
请求表如下
id| request_no| request_type_id (id of setup table)
1 | SM000001 | 1
2 | SM000002 | 2
这是历史表
id | request_id | status | date
1 | 1 | Pending | 2013-07-04 14:39:03
2 | 1 | Reviewing | 2013-07-05 01:10:14
3 | 1 | Implementing | 2013-07-06 11:25:54
4 | 1 | Completed | 2013-07-07 12:36:32
5 | 2 | Pending | 2013-07-10 15:05:56
6 | 2 | Reviewing | 2013-07-11 03:08:04
7 | 2 | Implementing | 2013-07-13 11:45:48
8 | 2 | Completed | 2013-07-17 14:28:15
在gridview我想显示为
request no | request type
SM000004 | aaa
SM000006 | bbb
这是gridview
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'request-processing-time-grid',
'dataProvider'=>$report->newsearch(),
'filter'=>$report,
'afterAjaxUpdate' => 'reinstallDatePicker', // (#1)
'columns'=>array(
'request_no',
array(
'name' => 'request_type_id',
//'value' => '(in_array($data["request_type_id"], $types) ? $data->requesttypes->name : "1")',
//'value' => '$data["request_type_id"]',
//'value' => $types['$data["request_type_id"]'],
//'value' => '$data->requesttypes->name',
//'value' => '$data["request_type_id"]',
'value' => '$data["request_type_id"].requesttypes.name',
'filter' => $types,
),
),
));
这是模型的新研究
public function newsearch(){
$query = "SELECT a.request_id, r.request_no, r.request_type_id, r.request_category_id, r.financial_type_id, r.urgency_id,
CONCAT(
FLOOR(HOUR(TIMEDIFF(implementing,reviewing)) / 24), ' days ',
MOD(HOUR(TIMEDIFF(implementing,reviewing)), 24), ' hours ',
MINUTE(TIMEDIFF(implementing,reviewing)), ' minutes') rT,
CONCAT(
FLOOR(HOUR(TIMEDIFF(completed,implementing)) / 24), ' days ',
MOD(HOUR(TIMEDIFF(completed,implementing)), 24), ' hours ',
MINUTE(TIMEDIFF(completed,implementing)), ' minutes') iT
FROM (
SELECT x.request_id
, MAX(CASE WHEN status = 'pending' THEN created_date END) pending
, MAX(CASE WHEN status = 'reviewing' THEN created_date END) reviewing
, MAX(CASE WHEN status = 'implementing' THEN created_date END) implementing
, MAX(CASE WHEN status = 'completed' THEN created_date END) completed
FROM history x
GROUP
BY request_id
) a, request r WHERE r.id = a.request_id ";
$count=Yii::app()->db->createCommand($query)->queryScalar();
$key="request_id";
$dataProvider=new CSqlDataProvider($query, array(
'totalItemCount'=>$count,
'keyField' => $key,
'sort'=>array(
'attributes'=>array(
'request_id' ),
),
'pagination'=>array(
'pageSize'=>10,
),
));
return $dataProvider;
}
这是表格的关系
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'requesttypes' => array(self::BELONGS_TO, 'Setup', 'request_type_id'),
'requestcategories' => array(self::BELONGS_TO, 'Setup', 'request_category_id'),
'requestfinanicaltypes' => array(self::BELONGS_TO, 'Setup', 'financial_type_id'),
'requesturgent' => array(self::BELONGS_TO, 'Setup', 'urgency_id'),
'profiles' => array(self::BELONGS_TO, 'Profiles', 'user_id'),
'requests' => array(self::BELONGS_TO, 'Request', 'request_id'),
);
}
请求类型仅显示request_type_id
。我想显示`setup.name。
我该怎么做?
答案 0 :(得分:0)
我在这里举个例子:
你有两张桌子:
Setup: id, name
Request: id, request_type_id, request_no
在您可以定义的关系中:
'setup' => array(self::BELONGS_TO, 'Setup', 'request_type_id'),
然后搜索时
$requests = Request::model()->with('setup')->findAll();
如果您需要任何条件,可以在这里申请。
然后你可以为$ requests中的每个$ request访问这样的字段:
$setup_name = $request->setup->name;
如果您需要使用dataProvider,您可以执行以下操作:
$criteria = new CDbCriteria;
$criteria->with = array('setup');
$dataProvider=new CActiveDataProvider(Request, array(
'criteria'=> $criteria,
....
));
然后在你的gridview中你可以:
$data->setup->name
答案 1 :(得分:0)
这个新的模型研究
public function newsearch(){
$query = "SELECT a.request_id, r.request_no, s1.name request_type, s2.name request_category, s3.name financial_type, s4.name request_urgency,
CONCAT(
FLOOR(HOUR(TIMEDIFF(implementing,reviewing)) / 24), ' days ',
MOD(HOUR(TIMEDIFF(implementing,reviewing)), 24), ' hours ',
MINUTE(TIMEDIFF(implementing,reviewing)), ' minutes') rT,
CONCAT(
FLOOR(HOUR(TIMEDIFF(completed,implementing)) / 24), ' days ',
MOD(HOUR(TIMEDIFF(completed,implementing)), 24), ' hours ',
MINUTE(TIMEDIFF(completed,implementing)), ' minutes') iT
FROM (
SELECT x.request_id
, MAX(CASE WHEN status = 'pending' THEN created_date END) pending
, MAX(CASE WHEN status = 'reviewing' THEN created_date END) reviewing
, MAX(CASE WHEN status = 'implementing' THEN created_date END) implementing
, MAX(CASE WHEN status = 'completed' THEN created_date END) completed
FROM history x
GROUP
BY request_id
) a, request r LEFT JOIN setup s1 ON r.request_type_id = s1.id
LEFT JOIN setup s2 ON r.request_category_id = s2.id
LEFT JOIN setup s3 ON r.financial_type_id = s3.id
LEFT JOIN setup s4 ON r.urgency_id= s4.id
WHERE r.id = a.request_id ";
if(isset($this->request_no))
$query .= " AND r.request_no LIKE '%" . $this->request_no ."%'";
if(isset($this->request_type_id))
$query .= " AND r.request_type_id LIKE '%" . $this->request_type_id ."%'";
if(isset($this->request_category_id))
$query .= " AND r.request_category_id LIKE '%" . $this->request_category_id ."%'";
if(isset($this->urgency_id))
$query .= " AND r.urgency_id LIKE '%" . $this->urgency_id ."%'";
//echo $query;
//die;
$count=Yii::app()->db->createCommand($query)->queryScalar();
$key="request_id";
$dataProvider=new CSqlDataProvider($query, array(
'totalItemCount'=>$count + 1,
//'with'=>array('requesttypes'),
'keyField' => $key,
'sort'=>array(
'attributes'=>array(
'request_id' ),
),
'pagination'=>array(
'pageSize'=>10,
),
));
return $dataProvider;
}
这是视图的cgridview
<?php
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'request-processing-time-grid',
'dataProvider'=>$report->newsearch(),
'filter'=>$report,
'afterAjaxUpdate' => 'reinstallDatePicker', // (#1)
'columns'=>array(
'request_no',
//'request_id',
array(
'name' => 'request_type_id',
'value' => '$data["request_type"]',
'filter' => $types,
),
array(
'name' => 'request_category_id',
'value' => '$data["request_category"]',
'filter' => $categories,
),
array(
'name' => 'urgency_id',
'value' => '$data["request_urgency"]',
'filter' => $urgencies,
),
array(
'header' => 'Time in Reviewing',
'name' => 'rT',
'value' => '($data["rT"] == NULL) ? "Not Revewing" : $data["rT"]',
'filter' => '',
),
array(
'header' => 'Time in Implementing',
'name' => 'iT',
'value' => '($data["iT"] == NULL) ? "Not Implementing" : $data["iT"]',
'filter' => '',
),
),
));
?>