2016-08-28 3 views
0

からyii2アクティブなデータpoviderにアクセスできませんこれは、データプロバイダを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、\ "\ organiser.organizerID))AS名" –

+0

検索モデルでも仮想属性$ Nameを宣言し、グリッドで 'attribute' => '名前' –

答えて

0

DBで操作を行い、結果を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', 

], 

注意を並べ替えや検索ボックスの追加などの作業を行うには、このフィールドで追加の作業を行う必要があります。

関連する問題