如何为同一个表的多个连接指定别名?

时间:2016-01-06 11:27:48

标签: yii2

我的模型中定义了两个关系到同一个表

public function getCountry(){
    return $this->hasOne(Country::className(),['country_id' => 'country_id']);
}

public function getCurrency(){
    return $this->hasOne(Country::className(), ['country_id' => 'currency']);
}

我想在我的查询中加入这两个关系。下面的代码显示错误。

Country::find()->joinWith(['country','currency'])->....

也试过这个

Country::find()->joinWith(['country','currency as cur'])->....

如何为第二关系指定别名??

3 个答案:

答案 0 :(得分:5)

您可以为特定关系提供别名,如下所示:

->joinWith([
    'country', 
    'currency' => function ($q) {
        $q->from(Country::tableName() . ' cur');
    }
])

请参阅此主题以获取更多详细信息 - https://github.com/yiisoft/yii2/issues/2377#issuecomment-34573765

答案 1 :(得分:2)

自Yii 2.0.7起:

->joinWith(['country', 'currency cur'])... // Note we dont use `as`, just an space

来源:Yii2 Guide

答案 2 :(得分:0)

没有关系

Category::find()
    ->select('c1.*')
    ->from('category c0')
    ->innerJoin('category as c1', 'c1.parent_id = c0.id')
    ->where(['c0.slug' => $parent]);