为什么我在Laravel查询生成器中得到不同的结果

时间:2020-11-05 21:29:12

标签: mysql laravel laravel-query-builder

所以我试图将此SQL查询转换为laravel查询生成器

select jenis_data.id_jenisdata, jenis_data.id_level, jenis_data.nama_data, detail_A.id_kecamatan, satuan.satuan,
    detail_A.tahun, detail_A.angka as tahun_2018, detail_B.angka as tahun_2019, opd.id_opd, detail_A.id_bidang, detail_A.id_detaildata,
    opd.wali_data, jenis_data.perkecamatan from jenis_data

    left join detail_data as detail_A on jenis_data.id_jenisdata = detail_A.id_jenisdata
    left join opd on detail_A.id_opd = opd.id_opd
    left join satuan on jenis_data.id_satuan = satuan.id_satuan
    left join detail_data as detail_B on detail_A.id_jenisdata = detail_B.id_jenisdata
    AND detail_A.tahun = 2018 
    AND detail_B.tahun = 2019
    group by jenis_data.id_jenisdata, detail_A.id_kecamatan

然后我想到了这个查询生成器

DB::table('jenis_data')
    ->select('jenis_data.id_jenisdata','jenis_data.id_level','jenis_data.nama_data','detail_A.id_kecamatan','satuan.satuan',
    'detail_A.tahun','detail_A.angka as tahun_2018', 'detail_B.angka as tahun_2019', 'opd.id_opd', 'detail_A.id_bidang',
    'opd.wali_data','jenis_data.perkecamatan')
    
    ->leftJoin('detail_data as detail_A', 'jenis_data.id_jenisdata','=','detail_A.id_jenisdata')
    ->leftJoin('opd','detail_A.id_opd','=','opd.id_opd')
    ->leftJoin('satuan','jenis_data.id_satuan','=','satuan.id_satuan')
    ->leftJoin('detail_data as detail_B', 'detail_A.id_jenisdata', '=', 'detail_B.id_jenisdata')
    ->where('detail_A.tahun','2018')
    ->where('detail_B.tahun','2019')
    ->groupBy('jenis_data.id_jenisdata', 'detail_A.id_kecamatan')
    ->get();

问题是我得到了不同的结果,laravel查询构建器的结果少于sql查询。就像我用查询生成器进行内部联接,而不是左联接。

result from sql query

result from query builder

1 个答案:

答案 0 :(得分:0)

在您的第一个查询中,没有“ where”子句。

在查询生成器中...

->leftJoin('detail_data as detail_B', function ($join) {
    $join->on('detail_A.id_jenisdata', '=', 'detail_B.id_jenisdata')
        ->where('detail_A.tahun','2018')
        ->where('detail_B.tahun','2019');
})