0

Use query on comma separated values with master table join

This is master admin user table

name region_id area_id phone_no
user 1 1,2,3 1,2 123456
user 2 2,1 1,2,3 789012

Master region table

region_id region_name
1 Ladakh
2 Punjab
3 Kutch

Master Area table

area_id area_name
1 Cachar
2 Nalbar
3 Dhubri

My page will list all the users from master table there i have search option based on search by drop which consists of 1.All 2.region 3.area 4.phone no

If the user selects area in search by dropdown and in search box if he types Dhubri then only user 2 must be shown in the list of our page, but if i select all option in search by dropdown and type Dhubri i need to get user 2 in the list or if i type Ladakh then i need to get both user based on above tables below is my code.

$master_user = Admin_Users::with('level')->whereIn('approval_status',['approved','pending'])->whereNotIn('status',['Deleted']);

    if($search_by === "All"){
        $master_user =   $master_user->where(function($query) use ($search_string) {
            $query->where('name', 'LIKE', '%'.$search_string.'%')
            ->orwhere('phone_no', 'LIKE', '%'.$search_string.'%');
        });
    }else if($search_by === "name"){
            $master_user =   $master_user->where(function($query) use ($search_string) {
            $query->where('name', 'LIKE', '%'.$search_string.'%');
        });
    }else if($search_by === "phone_number"){
        $master_user =   $master_user->where(function($query) use ($search_string) {
            $query->where('phone_no', 'LIKE', '%'.$search_string.'%');
        });
    }else if($search_by === "region"){
        $getregionId = Master_Regions::where('region_name', 'LIKE', '%'.$search_string.'%')->first();
        $regionId = $getregionId['region_id'];
        
        if($regionId){
            $master_user = $master_user->where(function($query) use ($regionId) {
                $query->where('adminusers_tbl.region_id','=', $regionId)
                ->orWhere('adminusers_tbl.region_id','like', $regionId.',%')
                ->orWhere('adminusers_tbl.region_id','like', '%,'.$regionId.',%')
                ->orWhere('adminusers_tbl.region_id','like', '%,'.$regionId);
            });
        }
    }else if($search_by === "area"){
        $getareaId = Master_Area::where('area_name', 'LIKE', '%'.$search_string.'%')->first();
        $areaId = $getareaId['area_id'];
        
        if($areaId){
            $master_user = $master_user->where(function($query) use ($areaId) {
                $query->where('adminusers_tbl.area_id','=', $areaId)
                ->orWhere('adminusers_tbl.area_id','like', $areaId.',%')
                ->orWhere('adminusers_tbl.area_id','like', '%,'.$areaId.',%')
                ->orWhere('adminusers_tbl.area_id','like', '%,'.$areaId);
            });
        }
    }
Paul T.
  • 4,703
  • 11
  • 25
  • 29
kumar
  • 11
  • 1
  • See https://stackoverflow.com/a/3653574/7644018 about pitfalls of having `comma separated values` stored. – Paul T. May 21 '23 at 19:24

0 Answers0