2.5 KiB
2.5 KiB
挂号管理联表查询修复
问题描述
挂号列表页面中,患者姓名和医生姓名没有显示,后端接口返回数据不全。
问题原因
在 AppointmentLists.php 和 AppointmentLogic.php 中,联表查询时使用的表名缺少表前缀 la_。
ThinkPHP 在使用 leftJoin() 时,需要指定完整的表名(包括表前缀),而不能只写表名。
错误代码
// 错误:缺少表前缀
->leftJoin('user u', 'a.patient_id = u.id')
->leftJoin('admin ad', 'a.doctor_id = ad.id')
正确代码
// 正确:包含表前缀 la_
->leftJoin('la_user u', 'a.patient_id = u.id')
->leftJoin('la_admin ad', 'a.doctor_id = ad.id')
修复的文件
1. server/app/adminapi/lists/doctor/AppointmentLists.php
修复了两处:
lists()方法中的联表查询count()方法中的联表查询
2. server/app/adminapi/logic/doctor/AppointmentLogic.php
修复了一处:
detail()方法中的联表查询
数据库表说明
系统使用的表:
la_doctor_appointment- 挂号表(主表)la_user- 用户表(患者信息)la_admin- 管理员表(医生信息)
字段映射:
u.nickname→patient_name(患者姓名)u.mobile→patient_phone(患者电话)ad.name→doctor_name(医生姓名)
验证方法
修复后,访问挂号列表接口应该返回完整的数据:
{
"code": 1,
"msg": "success",
"data": {
"lists": [
{
"id": 1,
"patient_id": 2,
"patient_name": "张三", // ✅ 现在有值了
"patient_phone": "13800138000", // ✅ 现在有值了
"doctor_id": 1,
"doctor_name": "李医生", // ✅ 现在有值了
"appointment_date": "2026-03-05",
"appointment_time": "09:00:00",
"status": 1,
"status_desc": "已预约",
...
}
]
}
}
注意事项
在 ThinkPHP 中使用联表查询时:
-
使用模型的 leftJoin():必须指定完整表名(包括表前缀)
->leftJoin('la_user u', 'a.patient_id = u.id') -
使用 Db::table():可以不加表前缀(框架会自动添加)
Db::table('user')->alias('u')->... -
表前缀配置:在
config/database.php中配置'prefix' => 'la_',
相关文档
APPOINTMENT_MANAGEMENT_COMPLETE.md- 挂号管理完整文档APPOINTMENT_SETUP_GUIDE.md- 配置指南