首页 > 解决方案 > 语法错误或访问冲突:1066 不是唯一的表/别名:'

问题描述

我正在 laravel 中编写一个应用程序,它显示此错误 SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'medicals' (SQL: select * from patientsleft join medicalson medicals. patients_id= patients. idleft join medicalson medicals. trx_id= patient_referral. trx_id)

  return Patients::where(function ($q) use ($startdate, $enddate, $id) {
        $q->where("patient_referral.trx_id",  $id);
    })
        ->leftJoin("medicals", "medicals.patients_id", "=", "patients.id")
        ->leftJoin("medicals", "medicals.trx_id", "=", "patient_referral.trx_id")
        ->get();

医疗模型

class Medicals extends Model
{
protected $guarded = [];

public function patients()
{
    return $this->belongsTo(Patients::class, "id", "patients_id");
}
public function tests()
{
    return $this->belongsTo(Tests::class);
}
}

患者模型

类患者扩展模型 { protected $guarded = [];

public function medicals()
{
    return $this->hasMany(Medicals::class);
}

public function patient_referral()
{
    return $this->hasMany(PatientReferral::class);
}

}

患者转诊模型

类 PatientReferral 扩展模型 { protected $guarded = [];

protected $table = "patient_referral";


public function patients()
{
    return $this->belongsTo(Patients::class);
}
}

标签: laravel

解决方案


您尝试连接medicals表两次,因此在这种情况下,您需要为每个实例提供唯一别名,并在连接子句中指定列的别名,以便数据库知道表中要在过滤器中使用的确切列,例如

Patients::where(function ($q) use ($startdate, $enddate, $id) {
            $q->where("patient_referral.trx_id",  $id);
        })
        ->leftJoin("medicals as a", "a.patients_id", "=", "patients.id")
        ->leftJoin("medicals as b", "b.trx_id", "=", "patient_referral.trx_id")
        ->get();

推荐阅读