如何使用laravel雄辩地加入3张桌子?

时间:2019-09-24 05:18:51

标签: laravel

my table

代码:

function viewPDF()
{
    $reports = Report::join('president_report', 'reports.id', '=', 'president_report.report_id')
        ->join('president_report', 'presidents.id', '=', 'president_report.president_id')->
        select('reports.*')->where('president_report.report_id')
        ->filter()->latest()->get();
    $pdf = PDF::loadView('reports.test1', ['reports' => $reports]);
    return $pdf->stream('reports.pdf');
}

错误:

  

SQLSTATE [42000]:语法错误或访问冲突:1066不是唯一的   表/别名:“ president_report”(SQL:从reports内部选择*   在president_report上加入reportsid =   president_reportreport_id内部联接president_report   presidentsid = president_reportpresident_id其中   president_reportreport_idcreated_at des是空顺序)

2 个答案:

答案 0 :(得分:0)

president_reports表的两个联接使用单独的别名:

function viewPDF() {
    $reports = Report::join('president_report pr1', 'reports.id', '=', 'pr1.report_id')
        ->join('president_report pr2', 'presidents.id', '=', 'pr2.president_id')->
    select('reports.*')->where('pr1.report_id')
        ->filter()->latest()->get();
    $pdf = PDF::loadView('reports.test1', ['reports' => $reports]);
    return $pdf->stream('reports.pdf');
}

请注意,第二个联接对我来说可疑,因为我看不到联接查询中的presidents表在哪里。但是使用问题的一般解决方案是为两个联接使用不同的别名president_report

答案 1 :(得分:0)

尝试使用此代码

$reports = Report::join('president_report pr1', 'reports.id', '=', 'pr1.report_id')
        ->join('president_report pr2', 'presidents.id', '=', 'pr2.president_id')->
    select('reports.*')->where('pr1.report_id')
        ->filter()->latest()->get();
    $pdf = PDF::loadView('reports.test1', ['reports' => $reports]);
    return $pdf->stream('reports.pdf');