无法从gridview访问yii2活动数据提供者

时间:2016-08-28 04:05:18

标签: php yii2 yii2-advanced-app yii2-model

每个人都是我的函数,它将数据提供者返回到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',

    ],

这证明我的数据提供者包含数据,我尝试了几种方法,但我仍然无法访问它。 谁可以帮我这个事?

1 个答案:

答案 0 :(得分:0)

如果您想对数据库执行某些操作并在gridview上显示结果,则必须先在模型上定义变量并在gridview上使用该变量。在gridview中使用SQL查询是不正确的。长话短说,您可以在模型中轻松定义变量和getter方法,如下所示:

<?php

use yii\db\ActiveRecord;

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',

],

请注意,如果您想要排序或添加搜索框等内容,则必须为此字段执行一些额外的工作。