如何在Yii2中使用3个连接进行查询
问题描述:
all!我希望任何人都知道如何找到解决这个问题的方法。我有3个表加入,但是当我尝试通过连接方法进行连接时,我无法获得相关表以及语句无法工作的地方。所以,我的方法如何在Yii2中使用3个连接进行查询
public static function get_by_abc($letter = null,
$object = false) {
$result = self::find()
->join('INNER JOIN', 'geo_place', 'geo_place.city_id = geo_city.id')
->join('INNER JOIN', 'bus_station', 'geo_place.place_id = bus_station.geo_place_id')
->join('INNER JOIN', 'bus_company', 'bus_station.company_id = bus_company.id')
//->innerJoinWith('companies')
->where(['bus_company.active' => 1])
->andWhere(['like', 'geo_city.name', $letter.'%', false]);
if(!$object) $result->asArray();
return $result->all(); //->createCommand()->rawSql
}
接下来,我试图通过使溶液与yii2方法,但它不是工作压力太大:(我看起来像
public function getCompanies() {
return $this->hasMany(BusCompany::className(), ['id' => 'company_id'])
->viaTable('bus_station', ['geo_place_id' => 'place_id'])
->viaTable('geo_place', ['city_id' => 'id']);
}
但在这。万一我有geo_place和bus_company加入,但不与bus_station
所以表的结构是这样的:
答
尝试这样定义关系树:
public function getBusStation()
{
return $this->hasOne(BusStation::className(), [...]);
}
public function getBusCompanies()
{
return $this->hasMany(BusCompany::className(), ['id' => 'company_id'])->via('busStation'); // it will use your relation `getBusStation()` to join bus companies by this relation
}
它易于维护和理解,希望它会帮助你。