每个人这是我的函数,返回数据提供程序到gridview。
public function search($params)
{
$query = EventOrganizer::find()
->where(['event.approve' => 0])
->groupBy(['event.eventID']);
// add conditions that should always apply here
$query ->joinWith(['event', 'organizer']);
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
$query->select(['event.eventID','event.title','event.startDate','event.startTime','event.endDate','event.endTime',
'event.photo','event.description','event.location','event.approve',
"GROUP_CONCAT(CONCAT(`organizer`.`name`," ", `organizer`.`organizerID`)) AS Name"])
->andFilterWhere(['like', 'event.eventID', $this->eventID])
->andFilterWhere(['like', 'organizer.organizerID', $this->organizerID]);
return $dataProvider;
}
下面是我在gridview中的部分代码。当我试图访问数据提供程序内部的数据时,我无法访问我使用group_concat的列。
[
'label'=> 'End Time',
'attribute' => 'GROUP_CONCAT(CONCAT(`organizer`.`name`," ", `organizer`.`organizerID`)) AS Name',
],
我能够访问其他数据如下:
[
'label'=> 'End Date',
'attribute' => 'event.endDate',
],
这证明我的数据提供程序包含数据,我已经尝试了几种方法,但我仍然无法访问它。有人能帮我一下吗?
如果你想在DB上做一些操作,并在gridview
上显示结果,你必须首先在你的模型上定义一个变量,并在gridview
上使用它。在gridview
中使用SQL查询是不正确的。长话短说,您可以轻松地在模型中定义变量和getter
方法,如下所示:
<?php
use yiidbActiveRecord;
class YourModel extends ActiveRecord
{
public $organizerName;
// Some AR Model codes go here!
public function getOrganizerName()
{
/**
* Suppose you have a 1-1 relation which is called getOrganization
* and you retrive your desired data about the organization from
* that
*/
return $this->organization->name
. ' ('
. $this->organization->id
. ')';
}
}
现在你可以在你的模型中使用organizerName
属性:
[
'label'=> 'End Time',
'attribute' => 'organizerName',
],
请注意,如果您想做一些事情,如排序或添加一个搜索框,您必须为这个字段做一些额外的工作。