php - Yii2 中的 ModelSearch 查询错误

标签 php mysql yii2

我有两个表projectworkload。我想显示工作负载中添加的某个项目中的用户,以及该项目中的另一个成员(我称为该项目的团队成员)。

我的想法是将 2 个表 projectworkloaduser_id 条件连接起来,以获取用户具有 user_id 的项目,然后,从中再次加入 workload 表,从具有该 user_id 的用户项目中获取数据,并且团队成员的 user_id 将具有该项目。

我的代码在WorkloadSearch.php

public function searchWorkloadofUser($params) {
    $user_id = Yii::$app->user->id;
    $query = Workload::find()
        ->select(['workload.project_id', 'workload.commit_time', 'project.project_name', 'workload.from_date', 'workload.to_date', 'workload.workload_type', 'workload.comment'])
        ->join('INNER JOIN', 'project', 'workload.project_id=project.id')
        ->where('workload.user_id = '.$user_id)->orderBy('project.project_name ASC')->distinct();
    $query->join('INNER JOIN','workload', 'project.id = workload.project_id')->distinct();
}

我不明白为什么出现错误:

SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'workload'
The SQL being executed was: SELECT COUNT(*) FROM (SELECT DISTINCT `workload`.`project_id`, `workload`.`commit_time`, `project`.`project_name`, `workload`.`from_date`, `workload`.`to_date`, `workload`.`workload_type`, `workload`.`comment` FROM `workload` INNER JOIN `project` ON workload.project_id=project.id INNER JOIN `workload` ON project.id = workload.project_id WHERE workload.user_id = 20) `c`

最佳答案

就像其他人说的:你需要一个别名。您的错误消息告诉您:

SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'workload'

这是因为您将表 worload 加入到 workload 表中:

$query = Workload::find() //your `workload` table
    ->select([
        ....
    ])
    ->join('INNER JOIN', 'project p'], 'workload.project_id=p.id')
    ->where('workload.user_id = '.$user_id)
    ->orderBy('p.project_name ASC')
    ->distinct();

$query->join('INNER JOIN','workload', 'project.id = workload.project_id') //join the `workload` table to the `workload` table
    ->distinct();

当您想要将一个表与其自身连接时,您必须至少为连接表定义一个别名。

我建议您引用 Yii2 指南 here 中描述的表名和列。并且连接字符串,但像描述的那样绑定(bind)参数herehere 。此代码应该适合您(未经测试):

$query = Workload::find() //your `workload` table
    ->select([
        '{{workload}}.[[project_id]]', //quoting tablenames and columns
        '{{%workload}}.[[commit_time]]', //add '%' when you're using table prefix
        ...
    ])
    ->join('INNER JOIN', 'project p'], 'workload.project_id=p.id')
    ->where('workload.user_id' = :user_id, [':user_id' => $user_id]) //You should bind params when use string format
    //or use hash format
    //->where(['workload.user_id' => $user_id])
    ...

$query->join('INNER JOIN','workload w2', 'project.id = w2.project_id') //Use the alias `w2` to  join the `workload` table to the `workload` table
    ->distinct();

关于php - Yii2 中的 ModelSearch 查询错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33276146/

相关文章:

php - 将复选框插入 PHP Post 数组

php - Bootstrap 3.3.7 与 codeigniter

PHP session 数据未保存

mysql - Laravel 迁移中的 Neo4j 和 Mysql

php - 从 MyISAM 切换到 InnoDB 后 Eloquent save() 不工作

php - yii2 - 从 View 重定向到另一个 View

php - Yii2 : Vote for a Post in AJAX or Pjax

php - Yii2 ListView 和数据提供者

php - 如何根据url更改css

php - 通过页面打开 mysql 连接是否完全鲁莽?