2016-08-28 3 views
0

все это моя функция, которая возвращает поставщика данных в gridview.Невозможно получить доступ к активному положению yii2 из 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; 

    } 

Ниже приводится часть моего кода в виде сетки. Когда я пытаюсь получить доступ к данным внутри поставщика данных, я не мог получить доступ к столбцу, который у меня был с помощью group_concat.

[ 
     'label'=> 'End Time', 
     'attribute' => 'GROUP_CONCAT(CONCAT(`organizer`.`name`,\" \", `organizer`.`organizerID`)) AS Name', 

], 

Я был в состоянии получить доступ к другим данным следующим образом:

[ 
      'label'=> 'End Date', 
      'attribute' => 'event.endDate', 

    ], 

это доказать, что мой провайдер данных содержит данные, у меня есть попробовать несколько способов, но я до сих пор не может получить доступ в теме. Может ли кто-нибудь помочь мне в этом?

+0

Попробуйте без тиков '': "GROUP_CONCAT (CONCAT (organizer.name, \" \ ", organizer.organizerID)) AS Name" –

+0

Также в модели поиска объявляют виртуальный атрибут $ Name и в атрибуте Grid 'attribute' => 'Имя' –

ответ

0

Если вы хотите выполнить некоторую операцию над БД и показать результат на gridview, сначала вы должны определить переменную на своей модели и использовать ее на своем gridview. Неправильно использовать SQL-запрос в gridview. Короче говоря, вы можете легко определить переменную и метод 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', 

], 

Обратите внимание, что если вы хотите чтобы сделать что-то вроде сортировки или добавления окна поиска, вы должны сделать некоторые дополнительные работы для этого поля.

Смежные вопросы