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

标签 php mysql laravel laravel-query-builder

我正在尝试将原始 sql 转换为 Laravel 查询构建器,但在如何使用许多属性匹配来连接多个表方面遇到了困难。

在本例中,我想将表 jr_h 和 jr_d 与三个属性匹配(book、p_seq 和 Staff_code)而不是一个(book)连接起来。 原始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();

并且还想知道是否有一种方法可以使查询更快,因为表中有大量数据。

最佳答案

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();
    `

关于php - 如何连接具有多个属性匹配的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57323954/

相关文章:

mysql - 从未知时间戳转换为可读时间戳

php - 打开模态时保留变量的值

mysql - SQL 更新表列默认空查询

php - 多次调用 Eloquent 动态属性会多次访问数据库吗?

php - Laravel "Hash::make"替代 url 参数?

php - Codeigniter - 使用分页,仅显示数据库中的用户数据

javascript - cakephp - js文件中图像的路径

php - javascript(jquery)中的组合树

javascript - 从 PHP 插入 DOM 的动态变量。将该变量从 DOM 传递到 Javascript 时遇到问题

mysql - 如何在 sql 查询的空字段中显示文本?