【发布时间】:2019-03-15 02:48:15
【问题描述】:
我在尝试加入多个表时收到此错误消息
Illuminate \ Database \ QueryException (42000)
SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'users' (SQL: select * from `prescriptions` inner join `doctors` on `prescriptions`.`doctor_id` = `doctors`.`id` inner join `users` on `doctors`.`user_id` = `users`.`id` inner join `patients` on `prescriptions`.`patient_id` = `patients`.`id` inner join `users` on `patients`.`user_id` = `users`.`id` inner join `pharmacies` on `prescriptions`.`patient_id` = `pharmacies`.`id` inner join `users` on `pharmacies`.`user_id` = `users`.`id` where `prescriptions`.`pharmacy_id` = 1)
我的代码是这样的
$prescriptions = DB::table('prescriptions')
->join('doctors', 'prescriptions.doctor_id', '=', 'doctors.id')
->join('users', 'doctors.user_id', '=', 'users.id')
->join('patients', 'prescriptions.patient_id', '=', 'patients.id')
->join('users', 'patients.user_id', '=', 'users.id')
->join('pharmacies', 'prescriptions.patient_id', '=', 'pharmacies.id')
->join('users', 'pharmacies.user_id', '=', 'users.id')
->where('prescriptions.pharmacy_id',$pharmacy->id)
->get();
我的 ERD 图
【问题讨论】:
-
您在连接中使用了 3 次“用户”表。所以他们的别名应该是唯一的。您可以将用户用作首次加入。用户作为 b 用于第二次加入,用户作为 c 用于第三次加入。简而言之,为每个连接使用唯一别名。
-
您将加入表
users三次:->join('users', 'doctors.user_id', '=', 'users.id')和->join('users', 'patients.user_id', '=', 'users.id'),因此它不是唯一别名。 -
您是否尝试指定要选择的内容?
-
药店应该与患者联系在一起,而不是与用户联系在一起。