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