簡體   English   中英

如何在Yii2中使用3個聯接進行查詢

[英]How to make a query with 3 joins in Yii2

所有! 我希望任何人都知道如何找到該問題的解決方案。 我有3個要連接的表,但是當我嘗試通過join方法進行連接時,我無法獲得相關表,並且where語句根本不起作用。 所以,我有一種方法

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
}

它易於維護和理解,希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM