2017-08-31 86 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到您的查询数组。