在Yii2上与ActiveDataProvider进行内部连接

wyyhbhjk  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(230)

我正在尝试以下操作:
我有3个模型:ClinicPackOfferedTreatment中的一个或多个。
PackOfferedTreatment通过FK clinic_idClinic相关,并且两个模型通过连接模型彼此相关:Pack_OfferedTreatmentpack_idofferedTreatment_id)。一包可以有多个OfferedTreatments
ClinicController,我想要某个诊所和与该诊所相关的某个包,并获取所有相关的offeredTreatments以显示视图
我从以下函数得到的结果是,它返回了与诊所关联的所有offeredTreatments,但没有返回到包....我做错了什么?

/**
 * @param $clinicId
 * @param $packId
 * @return array
 * @throws NotFoundHttpException
 */
public function actionPackOfferedTreatments($clinicId, $packId)
{

    $clinicId = (int)$clinicId;
    $packId = (int)$packId;

    // Find model of the clinic
    $model = $this->findModel($clinicId);

    // pack offeredTreatments:
    $packOfferedTreatmentDataProvider = new ActiveDataProvider([
        'query' => $model->getOfferedTreatments()
                         ->innerJoin('pack_offeredTreatment', false)
                         ->where(['pack_offeredTreatment.pack_id' => $packId]),
        'pagination' => false,
        'sort' => [
            'defaultOrder' => [
                'order' => SORT_ASC
            ]
        ]
    ]);
    Yii::$app->response->format = Response::FORMAT_JSON;
    return $packOfferedTreatmentDataProvider->getModels();
}
9njqaruj

9njqaruj1#

我会换一种方式考虑。你说Offered Treatment与诊所有外键关系a-但它不应该是这样。pack与诊所有关系,而treatment与pack有关系,所以它已经与trough pack有关系。
如果您设置了关系,诊所有许多包,包有许多治疗,您可以使用->innerJoinWith('packs.treatments')对诊所运行查询。如果您有包,则可以运行->with(['clinic', 'treatments'])
从文档中:
您可以急切地加载深度嵌套的关系,例如a.b.c.d。所有父关系都将急切地加载。也就是说,当您使用a.b.c.d调用with()时,您将急切地加载aa.ba.b.ca.b.c.d

相关问题