【问题标题】:Yii2 Not unique table/alias: 'user'Yii2 不是唯一的表/别名:'user'
【发布时间】:2015-01-31 18:04:22
【问题描述】:

在“票”模型中:

public function getUser()
{
    return $this->hasOne(User::className(), ['id' => 'user_id']);
}


public function getSupervisor()
{
    return $this->hasOne(User::className(), ['id' => 'supervisor_id']);

在“TicketSearch”模型中:

    $query->joinWith(['user','supervisor']);

    $query
        ->andFilterWhere(['like', 'user.surname', $this->user_id])
        ->andFilterWhere(['like', 'user.surname', $this->supervisor_id]

如果我尝试搜索主管,则会收到此错误:

Not unique table/alias: 'user'
The SQL being executed was: SELECT COUNT(*) FROM `ticket` LEFT JOIN `user` ON `ticket`.`user_id` = `user`.`id` LEFT JOIN `user` ON `ticket`.`supervisor_id` = `user`.`id` WHERE `user`.`surname` LIKE '%surname4%'

我已尝试更改名称用户表:

    public function getSupervisor()
    {
        return $this->hasOne(User::className(), ['id' => 'supervisor_id'])
->from(User::tableName() . 'u2');
    }

但是返回了这个错误:

You have an error in your SQL syntax; check the manual that corresponds 
to your MySQL server version for the right syntax to use near 'u2.`id` 
WHERE `supervisor`.`surname` LIKE '%surname4%'' at line 1 The SQL being executed was:
SELECT COUNT(*) FROM `ticket` LEFT JOIN `user` ON `ticket`.`user_id` = `user`.`id` LEFT JOIN `user`u2 ON
`ticket`.`supervisor_id` = `user`u2.`id` WHERE `supervisor`.`surname` LIKE '%surname4%'

【问题讨论】:

    标签: yii2 table-alias


    【解决方案1】:

    您错过了别名前的空格。应该是:

    public function getSupervisor()
    {
        return $this->hasOne(User::className(), ['id' => 'supervisor_id'])
            ->from(User::tableName() . ' u2');
    }
    

    您也可以将其指定为数组键:

    public function getSupervisor()
    {
        return $this->hasOne(User::className(), ['id' => 'supervisor_id'])
            ->from(['u2' => User::tableName()]);
    }
    

    甚至在 joinWith() 中也有这种关系:

    ->joinWith([
        'supervisor' => function ($query) {
            /* @var $query \yii\db\ActiveQuery */
    
            $query->from(User::tableName() . ' u2');
            // or $query->from(['u2' => User::tableName()]);
        },
    ]);
    

    官方文档:

    【讨论】:

    • 抱歉,我可以将答案标记为已接受吗?我必须将标题问题编辑为:“[Accepted] Yii2 Not unique table/alias: 'user'”
    • 只需选中答案附近的复选框(左侧,柜台下方)。
    • 我认为当关系在不同的数据库中时它不起作用
    【解决方案2】:

    从2.0.7版本开始有alias()方法:

    public function getSupervisor()
    {
        return $this->hasOne(User::className(), ['id' => 'supervisor_id'])->alias('supervisor');
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      相关资源
      最近更新 更多