如何连接具有多个属性匹配的表?

How to join tables with more than one attribute match?

我正在尝试将我的原始 sql 变成 laravel 查询生成器,但我遇到了如何使用多个属性匹配来加入多个 table 的困难。

在这种情况下,我想加入 table jr_h 和 jr_d 三个属性匹配 (book,p_seq 和 staff_code) 而不是比一本(书)。 原始 sql:

 $sql =  "select from_time,to_time,t.staff_code,s.name_t as staff_name,t.book,t.p_code,t.p_seq,p.hrs1,s.img_file, 
        t.hrs_work,p.sharing_cnt  as hrs_work, t.hrs_ot  as hrs_ot from jr_d as t 
        inner join jr_h as p on(t.book=p.book and t.p_seq=p.p_seq and t.staff_code=p.staff_code)  
        inner join astaff as s on(t.staff_code=s.staff_code) ";

Laravel 查询生成器:

   $jr_d = DB::table('jr_d')
        ->join('jr_h', 'jr_d.book', '=', 'jr_h.book')
        ->join('astaff', 'jr_d.staff_code', '=', 'astaff.staff_code')
        ->select('jr_h.*','jr_d.*','astaff.*','astaff.name_t as staff_name')
        ->where('jr_d.ref_group','=','E')
        ->get();

并且还想知道是否有办法加快查询速度,因为它在 table 中有很多数据。

试试这个:

// ...
->join('jr_h p', function($join) {
   $join->on('t.book', '=', 'p.book');
   $join->on('t.p_seq', '=', 'p.p_seq');
// ... more conditions
});

Laravel 加入多个条件:

$results = DB::table('jr_d')
            ->select('jr_h.*','jr_d.*','astaff.*','astaff.name_t as staff_name')
            ->join('jr_h', 'jr_d.book', '=', 'jr_h.book')
            ->join('jr_h as p', function($query){
                $query->on('t.book','=', p.book');
                $query->on('t.p_seq','=', 'p.p_seq');
                $query->on('t.staff_code', '=', 'p.staff_code');
            })
            ->where('jr_d.ref_group','=','E')
            ->get();
    `

试试这个。

$jr_d = DB::table('jr_d')
        ->join('jr_h', 'jr_d.book', '=', 'jr_h.book')
        ->join('astaff', 'jr_d.staff_code', '=', 'astaff.staff_code')
        ->select('*','astaff.name_t as staff_name')
        ->where('jr_d.ref_group','=','E')
        ->get();