2017-08-31 85 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數據tbl_checks中的數據

+0

我想你可以從你的ActiveRecord類中指定的關係中獲得你需要的數據。 – ArtOsi

+0

getModel()不是很確定 –

+0

我不確定,但我認爲你可以在你從'$ provider-> getModels()'獲得的每個模型上調用'$ model-> getChecks()'' getChecks()'方法返回'TblTrucks'類的相關記錄 – ArtOsi

回答

0

要獲取模型中的相關字段,首先必須具有關係模型TblChecks定義關係模型TblTrucks acording到documentation 在你情況下,將一些這樣的:

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']); 
} 

不是使用方法joinWith

$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只需調用方法all() 例如:

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

而在VAR $trucks你將有一個模型TblTrucks與關係模型(TblChecks在這種情況下)acording到您的查詢數組。