Laravel Raw Query Array Result was only a half correct

61 Views Asked by At

I've tried to run raw query in Laravel but the result was only a half correct. I am using SQL Server.

Here is my code:

  public function listAll (Request $req) {
    $str_aktif1 = "1"; $str_aktif2 = "1"; $str_perk = "%"; $str_flagmenu = "HT";
    if ($req->has('isaktif')) {
      switch ($req->aktif) {
        case 0:
          $str_aktif1 = "0"; $str_aktif2 = "0";
          break;
        case 1:
          $tampil = "1"; $str_aktif2 = "1";
          break;
        
        default:
          $tampil = "null"; $str_aktif2 = "2";
          break;
      }
    }

    if ($req->has('perkiraan')) {
      $str_perk = ($req->perkiraan == 'Semua') ? "%" : $req->perkiraan;
    }

    if ($req->has('flagmenu')) {
      $str_perk = ($req->flagmenu == 0) ? "HT" : "PT";
    }

    $str = "";
    $str .= "select  distinct a.*, ";
    $str .= "        a.ALAMAT1+case when ltrim(a.Alamat2)='' then '' else CHAR(13)+a.ALAMAT2 end ALAMAT, ";
    $str .= "        a.Usaha+Case when isnull(a.Usaha,'')='' then '' else '. ' end+a.NamacustSupp Nama, ";
    $str .= "        case when A.iskontrak is null then 0  ";
    $str .= "             when A.iskontrak=0 then 0  ";
    $str .= "             when A.iskontrak=1 then 1 end xkontrak,  ";
    $str .= "        NamaJenis,Cd.NamaGroupCustSUpp MyAgent, ";
    $str .= "        D.namaKota,D.KodeArea,E.namaArea,[dbo].[DataPostHutPiut
    (A.KodecustSupp,'".$str_flagmenu."') DetailAkun ";
    // $str .= "from temp_dbCustSupp  a ";
    $str .= "from dbCustSupp  a ";
    $str .= "     left outer join dbperkcustsupp b on b.kodecustsupp=a.kodecustsupp ";
    $str .= "     left outer join dbPerkiraan c on c.perkiraan=b.perkiraan and c.tipe=1 ";
    $str .= "     left outer join dbkota D on a.kota=D.KodeKota ";
    $str .= "     left outer join dbarea E on D.KodeArea=E.KodeArea ";
    $str .= "     left outer Join DbJenisCustSupp F on A.JenisCustSupp=F.KodeJenis ";
    $str .= "     left outer join DBGROUPCUSTSUPP cd on  A.agent=cd.KODEGROUPCUSTSUPP ";
    $str .= "where (a.IsAktif  Like ".$str_aktif1." or ".$str_aktif2."=2) ";
    $str .= "  and isnull(c.Keterangan,'')+' ('+isnull(b.Perkiraan,'')+')' like '".$str_perk."' ";
    $str .= "  and a.Jenis=1 ";
    $str .= "Order by a.KodeCustSupp ";
    // dd($str);

    $listData = DB::connection('SML')->select($str);
    // dd($listData);
    return $listData;
  }

I've tried to run the final $str in SQL Server and the query was perfectly fine. But when I looked into $listData, only 27 of 102 rows are correct. Index 28 to end seems trouble.

18 => {#1709 ▶}
19 => {#1711 ▶}
20 => {#1742 ▶}
21 => {#1743 ▶}
22 => {#1744 ▶}
23 => {#1745 ▶}
24 => {#1746 ▶}
25 => {#1747 ▶}
26 => {#1748 ▶}
27 => {#1749 ▶} --> there is something wrong here
28 => {#1750 …91} --> there is no triangle button from here
29 => {#1751 …91}
30 => {#1752 …91}
31 => {#1753 …91}
32 => {#1754 …91}
33 => {#1755 …91}
34 => {#1756 …91}
35 => {#1757 …91}
36 => {#1758 …91}
37 => {#1759 …91}
38 => {#1760 …91}
39 => {#1761 …91}
40 => {#1762 …91}

Comparing index 27 & 28, index 28 stop in "...48"

=== EDIT ===

I FOUND THE PROBLEM BUT I DONT KNOW WHY THE PREVIOUS PROBLEM HAPPEN

if ($req->has('flagmenu')) {
  $str_perk = ($req->flagmenu == 0) ? "HT" : "PT";
}

Should be $str_flagmenu not $str_perk When i change this, everything work fine.

0

There are 0 best solutions below