Laravel Query Muti Where

ปัญหา คือต้องการ query ข้อมูลแบบมีเงื่อนไขโดยสามารถกำหนดได้ว่าเมื่อมีการส่งค่าเท่านั้นถึงจะทำการใส่เงื่อนไขถ้าไม่มีการส่งไม่ต้องใส่เงื่อนไข

วิธีการแก้ปัญหา ทำการสร้าง function ไว้ใน where แล้วใน function ก็ทำการเขียนเงื่อนไขตามต้องการได้เลย

ตัวอย่าง

กำหนดตัวแปร

 private $data = []; 

ภายใน function เขียน query ข้อมูล

  $res = ResModel::where(function($q){
  $s = $this->data;
  if($s['ProvinceId']){
   $q->where('ProvinceId',$s['ProvinceId']);
  }
  if($s['AmphurId']){
   $q->where('AmphurId',$s['AmphurId']);
  }
  if($s['DistrictId']){
   $q->where('DistrictId',$s['DistrictId']);
  }
  if($s['ResName']){
   $q->where('ResName', 'like', '%'.$s['ResName'].'%');
  }
  })->get();