2017-11-16 31 views
0

私は社内テーブルの名前を社員IDに結合したいと思います。ここ 従業員モデルの私のコードはyii2のグリッドビューでテーブルを結合する方法

私はこのコードを使用する従業員の検索テーブルでこのコード

<?php PJax::begin();?> 
     <?= GridView::widget([ 
      'dataProvider' => $dataProvider, 
      'filterModel' => $searchModel, 
      'columns' => [ 
       //['class' => 'yii\grid\SerialColumn'], 

       //'id', 
       [ 
       'attribute' => 'company_id', 
       'value' => 'company.name', 
      ], 
       'emp_name', 
       'emp_email:email', 
       'emp_salery', 

       ['class' => 'yii\grid\ActionColumn'], 
      ], 
     ]); ?> 
    <?php PJax::end();?></div> 

を使用してインデックスファイルに

public function attributeLabels() 
     { 
      return [ 
       'id' => 'ID', 
       //'company_id' => 'Company ID', 
       'emp_name' => 'Emp Name', 
       'emp_email' => 'Emp Email', 
       'emp_salery' => 'Emp Salery', 
      ]; 
     } 

     public function getCompany() 
     { 
     return $this->hasOne(Company::className(),['id' => 'company_id']); 

     } 

public function search($params) 
     { 
      $query = Employee::find(); 
      $query->joinWith(['company']); 
      // add conditions that should always apply here 

      $dataProvider = new ActiveDataProvider([ 
       'query' => $query, 
      ]); 

      $this->load($params); 

      if (!$this->validate()) { 
       // uncomment the following line if you do not want to return any records when validation fails 
       $query->where('0=1'); 
       return $dataProvider; 
      } 

      // grid filtering conditions 
      $query->andFilterWhere([ 
       'id' => $this->id, 
      ]); 

      $query->andFilterWhere(['like', 'company_id', $this->company_id]) 
       ->andFilterWhere(['like', 'emp_name', $this->emp_name]) 
       ->andFilterWhere(['like', 'emp_email', $this->emp_email]) 
       ->andFilterWhere(['like', 'emp_salery', $this->emp_salery]) 
       ->andFilterWhere(['like', 'Company.name', $this->company_id]) 
      ->andFilterWhere(['like', 'company.name', $this->company]) 
    ; 


      return $dataProvider; 
     } 

http://localhost/test/web/employee/

はショーであります社内フィールド(未設定) pls help me

+0

「company_id」が最初にあることを確認してください。コードの残りの部分は正常に見えます。 –

答えて

1

これは2つの違いがあります。アクティブレコードを使用する場合は、最初のモデルでプロパティを選択し、それを選択してテーブルを結合する必要があります。

public $ pin;あなたがデータを取得するとき

、あなたは、第二のテーブルに固定する

にアクセス可能な第2の方法は、あなたが(asArrayを使用している)の両方のテーブル $モデル=ニュース内のすべてのデータをオフに返すこと::)(見つけます - > leftJoin( 'comment'、 'news.id = comment.news_id') - > asArray() - > all(); その後、あなたはあなたがゲッターなどを追加する必要があり、あなたのGridViewに

+0

私はあなたの言うことを理解していません – kusmi

0

それを使用することができます。getCompanyname()のnお使いのベースモデル

...... 
    public function attributeLabels() 
    { 
     return [ 
      'id' => 'ID', 
      //'company_id' => 'Company ID', 
      'emp_name' => 'Emp Name', 
      'emp_email' => 'Emp Email', 
      'emp_salery' => 'Emp Salery', 
      'companyName' => 'Company Name') 
     ]; 
    } 

    public function getCompany() 
    { 
    return $this->hasOne(Company::className(),['id' => 'company_id']); 

    } 

あなたは会社名

/* 
     Getter for company name 

    */ 
    public function getCommpanyName() { 
     return $this->company->name; 
    } 

のためのゲッターを追加する必要がありますし、あなたのグリッドビューでは、新しい取得名(companyName)を使用する必要があります。

<?= GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'filterModel' => $searchModel, 
     'columns' => [ 

      'companyName', 

      'emp_name', 
      'emp_email:email', 
      'emp_salery', 

      ['class' => 'yii\grid\ActionColumn'], 
     ], 
    ]); ?> 

より完全なサンプルの場合は http://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/

関連する問題