yii2 AR通过2个相对表找到

时间:2015-03-11 08:49:44

标签: yii2 relation

我有5张桌子: 主, 区域, 服务, master_service, master_region。

在Master模型中添加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时,我无法实现搜索条件,例如,选择所有主服务器。 请帮助怎么做“很好”意味着yii2

3 个答案:

答案 0 :(得分:0)

如果你使用Master getServices应该

public function getServices(){
    return $this->hasMany(Service::className(), ['id' => 'service_id']);
}

然后$master->getServices()返回ActiveQuery,您可以将其用于更高级的query

答案 1 :(得分:0)

试试:

Master::find()->innerJoinWith([
'services' => function ($query) use ($serviceId) {
        $query->where(['service.id' => $id]);
    },
'regions' => function ($query) use ($regionId) {
        $query->where(['region.id' => $regionId]);
    }
])->all();

请参阅文档https://github.com/yiisoft/yii2/blob/master/docs/guide/db-active-record.md#joining-with-relations-

答案 2 :(得分:0)

谢谢大家。我试过了

$model   = Master::find()->joinWith(['services', 'regions'])->where(['service.id'=>$service_id, 'region.id'=>$region_id])->all();

它的作品!