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