2017-08-31 4 views
0

私はYii2 ActiveDataproviderは、関連するフィールドデータを取得

$trucks = TblTrucks::find() 
        ->leftJoin("tbl_checks", "tbl_checks.truck_id=tbl_trucks.id") 
        ->Where(["town"=>$town]) 

        ->andWhere(["truck_status"=>6]) 
        ->andWhere(["between","tbl_trucks.created_at", $ts1, $ts2 ]); 


    $provider = new ActiveDataProvider([ 
     'query' => $trucks, 
     'pagination' =>false, 
    ]); 

今すぐ

return $provider->getModels(); 

これは私がまだ得ることができる方法のみtbl_trucksデータを返し経由thjeデータを取得していますように、左と私のdataProviderに参加し、セットアップを持っていますtbl_checksのデータ

+0

私はあなたのActiveRecordクラスで指定された関係から必要なデータを取得できると思います。 – ArtOsi

+0

getModel()からの具体的な意味はありません –

+0

私はあなたが '$ provider-> getModels()'から得た各モデルで '$ model-> getChecks()'を呼び出すことができると思います。 'TblTrucks'クラスの関連するレコードを返すgetChecks()メソッド – ArtOsi

答えて

0

モデルの関連フィールドを最初に取得するには、関連モデルが必要ですTblChecksTblTrucksの関係を定義するあなたに documentationに、それはそのようないくつかになりますケース:使用方法joinWithより

public function getTblChecks() 
{ 
    return $this->hasOne(TblChecks::className(), ['truck_id' => 'id']); 
    //or, depending on the type of relation (on-to-one or one-to-maty) 
    return $this->hasMany(TblChecks::className(), ['truck_id' => 'id']); 
} 

$trucks = TblTrucks::find() 
       ->joinWith(['tblChecks']) 
       ->Where(["town"=>$town]) 
       ->andWhere(["truck_status"=>6]) 
       ->andWhere(["between","tbl_trucks.created_at", $ts1, $ts2 ]); 

そして、あなたはそれを呼び出す関係フィールドを取得することができます。

$models = $provider->getModels(); 
$models[index]->tblChecks->needed_field 

しかし、あなたがあなたのクエリに応じてモードの配列を必要とする場合は、使用する必要はありませんActiveDataProviderちょうどメソッドを呼び出すたとえば、3210 :

$trucks = TblTrucks::find() 
       ->joinWith(['tblChecks']) 
       ->Where(["town"=>$town]) 
       ->andWhere(["truck_status"=>6]) 
       ->andWhere(["between","tbl_trucks.created_at", $ts1, $ts2 ])->all(); 

とVAR $trucksで、あなたのクエリた内容に応じて、モデル(この場合はTblChecks)関係モデルとTblTrucksの配列を持つことになります。

関連する問題