我正在尝试以下操作:
我有3个模型:Clinic
、Pack
和OfferedTreatment
中的一个或多个。Pack
和OfferedTreatment
通过FK clinic_id
与Clinic
相关,并且两个模型通过连接模型彼此相关:Pack_OfferedTreatment
(pack_id
,offeredTreatment_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();
}
1条答案
按热度按时间9njqaruj1#
我会换一种方式考虑。你说Offered Treatment与诊所有外键关系a-但它不应该是这样。pack与诊所有关系,而treatment与pack有关系,所以它已经与trough pack有关系。
如果您设置了关系,诊所有许多包,包有许多治疗,您可以使用
->innerJoinWith('packs.treatments')
对诊所运行查询。如果您有包,则可以运行->with(['clinic', 'treatments'])
。从文档中:
您可以急切地加载深度嵌套的关系,例如
a.b.c.d
。所有父关系都将急切地加载。也就是说,当您使用a.b.c.d
调用with()时,您将急切地加载a
、a.b
、a.b.c
和a.b.c.d
。