我有两个表project
和workload
。我想显示工作负载中添加的某个项目中的用户,以及该项目中的另一个成员(我称为该项目的团队成员)。
我的想法是将 2 个表 project
和 workload
与 user_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)参数here和 here 。此代码应该适合您(未经测试):
$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/