-1

So i tried to convert this sql query to laravel query builder

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

and i came up with this query builder

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

the problem is i got different result, the result from laravel query builder is fewer than the sql query. Its like im doing inner join with the query builder rather than left join.

result from sql query

result from query builder

Qori H
  • 1
  • 1

1 Answers1

0

In your first query, there is no "where" clause.

In query builder...

->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');
})