2016-12-08 9 views
0

すべて!誰もがこの問題の解決策を見つける方法を知っていることを願っています。私は参加するために3つのテーブルを持っていますが、私はjoinメソッドを使って参加しようとすると、関連するテーブルを取得することができず、ステートメントが全く動かない。だから、私は、私は、しかし、それはあまりにも働いていなかった、yii2方法とを経由して溶液を作製する方法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 

} 

次しようとしていたしました:(私は

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']); 
} 

しかし、この中のようになります。 。私はbus_stationでgeo_placeとbus_companyに参加しますが、していない場合

ので、テーブルの構造は次のようになります。

enter image description here

答えて

0

次のように関係ツリーを定義してください:それはあなたを助けることを願って、維持し、理解することが

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 
} 

その簡単。

関連する問題