【问题标题】:Yii2 ActiveDataprovider get the related fields dataYii2 ActiveDataprovider 获取相关字段数据
【发布时间】:2017-08-31 07:31:05
【问题描述】:

我已将我的数据提供者设置为左连接

$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 数据我如何仍能获取 tbl_checks 中的数据

【问题讨论】:

  • 我认为您可以从 ActiveRecord 类中指定的关系中获取所需的数据。
  • 因为 getModel() 没有具体是什么
  • 我不确定,但我认为您可以在从 $provider->getModels() 获得的每个模型上调用例如 $model->getChecks() 假设您有 getChecks() 方法,该方法在您的 TblTrucks 类中返回相关记录
  • 添加tblTrucks模型。

标签: php yii2


【解决方案1】:

要获得模型中的相关字段首先你必须有关系模型TblChecks根据documentation在模型TblTrucks中定义关系@ 在你的情况下,它会是这样的:

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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多