2016-08-24 3 views
0

yii2でmodelsearchを作成する際に問題があります。ここにだが、私はテーブルais3にテーブルaitambahからJurusanを表示したい関係図yii2で「検索」を実行すると表示される行に変更はありません

enter image description here

であり、私はテーブルからNamaMahasiswaais3をaiを表示したいです。テーブルs3penghubungテーブルaitambahは、ais3に関連付けることができます。私はそれらを表示することができました。しかし、ユルサンフィールドに "BIO"と入力しようとすると、検索が正しく動作しません。それはページをリフレッシュしています。表示される行に変更はありません。だから、私はそれを修正するために何をすべきですか?モデルの検索コード

<?php 

namespace app\models; 

use Yii; 
use yii\base\Model; 
use yii\data\ActiveDataProvider; 
use app\models\Ais3; 
use app\models\AiTambah; 

/** 
* Ais3Search represents the model behind the search form about `app\models\Ais3`. 
*/ 
class Ais3Search extends Ais3 
{ 
    /** 
    * @inheritdoc 
    */ 
    public function rules() 
    { 
     return [ 
      [['id', 'kode'], 'integer'], 
      [['NRP', 'NRP1', 'NRP2', 'NRP3', 'NRP4', 'NRP5', 'NRP6', 'NRP7', 'namaMahasiswaText', 'ProgramStudi', 'TanggalMasuk', 'TanggalKeluar', 'jURUSANText','NAMKANTOR','ANGKATAN'], 'safe'], 
     ]; 
    } 

    public $NamaMahasiswa; 
    public $namaMahasiswaText; 
    public $NRP1; 
    public $NRP2; 
    public $NRP3; 
    public $NRP4; 
    public $NRP5; 
    public $NRP6; 
    public $NRP7; 
    public $JURUSAN; 
    public $jURUSANText; 
    public $NAMKANTOR; 
    public $ANGKATAN; 





    /** 
    * @inheritdoc 
    */ 
    public function scenarios() 
    { 
     // bypass scenarios() implementation in the parent class 
     return Model::scenarios(); 
    } 

    /** 
    * Creates data provider instance with search query applied 
    * 
    * @param array $params 
    * 
    * @return ActiveDataProvider 
    */ 
    public function search($params) 
    { 
     $query = Ais3::find(); 
     $query->joinWith('ai'); 

     // 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, 
      'kode' => $this->kode, 

     ]); 




     $query->andFilterWhere(['like', 'ais3.NRP', $this->NRP]) 
      ->andFilterWhere(['like', 'ai.NamaMahasiswa', $this->namaMahasiswaText]) 
      ->andFilterWhere(['like', 'ais3.ProgramStudi', $this->ProgramStudi]) 
      ->andFilterWhere(['like', 'ai.TanggalMasuk', $this->TanggalMasuk]) 
      ->andFilterWhere(['like', 'ais3.TanggalKeluar', $this->TanggalKeluar]) 
      ->andFilterWhere(['like', 'aitambah.JURUSAN', $this->JURUSAN]); 



     return $dataProvider; 
    } 
} 

MY GridViewのコード

<?= GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'filterModel' => $searchModel, 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 

      //'id', 
      'NRP', 
      'namaMahasiswaText', 
      'ProgramStudi', 
      //'TanggalMasuk', 
      [ 
      'attribute' => 'TanggalMasuk', 
      'value' => function($data) { 
       return $data->ai->TanggalMasuk; 
      },], 
      'TanggalKeluar', 

      //YANG DITAMBAH 
      /*[ 
       'attribute'=>'NRP1', 
       'value'=>'s3penghubung.aitambah.JURUSAN', 
       'label' => 'Jurusan', 
      ],*/ 

      'jURUSANText', 

      [ 
       'attribute'=>'NRP2', 
       'value'=>'s3penghubung.aitambah.NAMKANTOR', 
       'label' => 'Nama Kantor', 
      ], 
      [ 
       'attribute'=>'NRP3', 
       'value'=>'s3penghubung.aitambah.ANGKATAN', 
       'label' => 'Angkatan', 
      ], 
      [ 
       'attribute'=>'NRP4', 
       'value'=>'s3penghubung.aitambah.TELP', 
       'label' => 'Nomor HP/Telp', 
      ], 
      [ 
       'attribute'=>'NRP5', 
       'value'=>'s3penghubung.aitambah.PEKERJAAN', 
       'label' => 'Pekejaan', 
      ], 
      [ 
       'attribute'=>'NRP6', 
       'value'=>'s3penghubung.aitambah.EMAIL', 
       'label' => 'Email', 
      ], 
      [ 
       'attribute'=>'NRP7', 
       'value'=>'s3penghubung.aitambah.KODEPROP', 
       'label' => 'KodeProp', 
      ], 


      // 'kode', 

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

MYモデルのCODE

<?php 

namespace app\models; 

use Yii; 

/** 
* This is the model class for table "ais3". 
* 
* @property integer $id 
* @property string $NRP 
* @property string $ProgramStudi 
* @property string $TanggalMasuk 
* @property string $TanggalKeluar 
* @property integer $kode 
* 
* @property Ai $nRP 
* @property S3penghubung $kode0 
*/ 
class Ais3 extends \yii\db\ActiveRecord 
{ 
    /** 
    * @inheritdoc 
    */ 
    public static function tableName() 
    { 
     return 'ais3'; 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function rules() 
    { 
     return [ 
      [['kode'], 'required'], 
      [['kode'], 'integer'], 
      [['NRP'], 'string', 'max' => 15], 
      [['ProgramStudi'], 'string', 'max' => 5], 
      [['TanggalMasuk', 'TanggalKeluar'], 'string', 'max' => 20], 
      [['NRP'], 'exist', 'skipOnError' => true, 'targetClass' => Ai::className(), 'targetAttribute' => ['NRP' => 'NRP']], 
      [['kode'], 'exist', 'skipOnError' => true, 'targetClass' => S3penghubung::className(), 'targetAttribute' => ['kode' => 'kode']], 
     ]; 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function attributeLabels() 
    { 
     return [ 
      'id' => Yii::t('app', 'ID'), 
      'NRP' => Yii::t('app', 'Nrp'), 
      'ProgramStudi' => Yii::t('app', 'Program Studi'), 
      'TanggalMasuk' => Yii::t('app', 'Tanggal Masuk'), 
      'TanggalKeluar' => Yii::t('app', 'Tanggal Keluar'), 
      'kode' => Yii::t('app', 'Kode'), 
      'namaMahasiswaText' => Yii::t('app', 'Nama Mahasiswa'), 
      'jURUSANText' => Yii::t('app', 'Jurusan'), 
     ]; 
    } 

    /** 
    * @return \yii\db\ActiveQuery 
    */ 
    public function getai() 
    { 
     return $this->hasOne(Ai::className(), ['NRP' => 'NRP']); 
    } 



    /** 
    * @return \yii\db\ActiveQuery 
    */ 
    public function getS3penghubung() 
    { 
     return $this->hasOne(S3penghubung::className(), ['kode' => 'kode']); 
    } 

    //YANG DITAMBAH 
    public function getRelasiS3() 
    { 
     return array(
       'aitambah'=>array(self::MANY_MANY, 'Aitambah', 'S3Penghubung(AiS3.id, Aitambah.NRP)'), 
      ); 
    } 


    public function getNamaMahasiswaText() 
    { 
     $ai = ai::findOne(['NRP'=> $this->NRP]); 
     if (empty($ai)) 
      return ''; 
     return $ai->NamaMahasiswa; 
    } 

    public function getJURUSANText() 
    { 
     $aitambah = aitambah::findOne(['NRP'=> $this->NRP]); 
     if (empty($aitambah)) 
      return ''; 
     return $aitambah->JURUSAN; 
    } 

} 

これらのコードを修正する方法はわかりません。これを解決するために私を助けてくれますか?ありがとうございます

答えて

1

あなたのコードはデバッグするのが非常に難しいです。命名規則に一貫性を持たせてください。 Yiiの方法はすべて小文字で、アンダースコアで区切られています。

リレーションの表示と並べ替えについては、thisthisをお読みください。

液としては、次のと少し実験することができます:あなたのSearchModelに続いて

/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getAitambah() 
{ 
    return $this->hasOne(Aitambah::className(), ['NRP' => 'NRP']); 
} 


は、モデル内の新しい関係を作成します

public function rules() 
{ 
    return [ 
     [['id', 'kode'], 'integer'], 
     [['NRP', 'NRP1', 'NRP2', 'NRP3', 'NRP4', 'NRP5', 'NRP6', 'NRP7', 'namaMahasiswaText', 'ProgramStudi', 'TanggalMasuk', 'TanggalKeluar', 'jURUSANText','NAMKANTOR','ANGKATAN', 'JURUSAN'], 'safe'], 
    ]; 
} 

あなたの検索方法:

最後に、あなたのビューで
... 
$query = Ais3::find(); 
query->joinWith(['ai ai', 'aitambah aitambah']); 
... 

[ 
    'attribute' => 'JURUSAN', 
    'value' => 'aitambah.JURUSAN', 
    'label' => 'JURUSAN', 
], 
+0

ありがとうそんなにコスタスMitsarakis。できます。神はあなたを祝福O :) – r7599acefll

+0

本当に?すばらしいです!真実を伝えるために、私はあなたのコードの多くを理解することができなかったので、野生の推測でした。また、回答を受け入れたものとしてマークしたい場合は、 –

+0

はい。私はそれに印を付けました。おはようxx – r7599acefll

関連する問題