Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
yii2 AR通过2个相关表格查找_Yii2_Relation - Fatal编程技术网

yii2 AR通过2个相关表格查找

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

我有5张桌子: 主人 区域 服务 大师级服务, 大师区

在Master add getter的模型中:

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