yii2 AR通过2个相关表格查找
我有5张桌子: 主人 区域 服务 大师级服务, 大师区 在Master add getter的模型中:yii2 AR通过2个相关表格查找,yii2,relation,Yii2,Relation,我有5张桌子: 主人 区域 服务 大师级服务, 大师区 在Master add getter的模型中: public function getServices(){ return $this->hasMany(Service::className(), ['id' => 'service_id']) ->viaTable(MasterService::tableName(), ['master_id' => 'id']); } public functio
public function getServices(){
return $this->hasMany(Service::className(), ['id' => 'service_id'])
->viaTable(MasterService::tableName(), ['master_id' => 'id']);
}
public function getRegions(){
return $this->hasMany(Region::className(), ['id' => 'region_id'])
->viaTable(MasterRegion::tableName(), ['master_id' => 'id']);
}
一切正常!但是我不能实现搜索条件,例如,当service.id=1,region.id=1时,选择所有主控。
如果您使用的是Master getServices,请帮助您如何很好地完成这项任务
public function getServices(){
return $this->hasMany(Service::className(), ['id' => 'service_id']);
}
然后$master->getServices返回ActiveQuery,您可以使用它进行更高级的操作
Master::find()->innerJoinWith([
'services' => function ($query) use ($serviceId) {
$query->where(['service.id' => $id]);
},
'regions' => function ($query) use ($regionId) {
$query->where(['region.id' => $regionId]);
}
])->all();
请参阅文档谢谢大家。我试过了
$model = Master::find()->joinWith(['services', 'regions'])->where(['service.id'=>$service_id, 'region.id'=>$region_id])->all();
还有它的作品 这是可行的,但是你可以少做两次连接。您现在正在加入4个表,只需加入2个表即可。如果您需要速度,并且正在处理大量记录,您可以对此进行改进。MasterService已具有service\u id,当您可以将其与MasterService.service\u id进行比较时,不需要访问service.id