I got a column called fac that values can be a single number like 2 and also can be comma separated like 2,4,5
I want to get data from database via api. Also value can be a single or comma separated too. so user can search like these:
localhost/api/search {fac: 1}
Or
localhost/api/search {fac: 1,4,5}
I used find_in_set but look like it not working in this case:
$fac = request('fac');
->whereRaw("find_in_set({$fac}, fac)")->get();
If I run this localhost/api/search {fac: 1} it return nothing, if I run localhost/api/search {fac: 1,4,5} it give me error:
Syntax error or access violation: 1582 Incorrect parameter count in the call to native function ‘find_in_set’
Goal:
If user search 1 it should return all data that contains 1, if search 1,7 should return all data that contains 1 and 7
Advertisement
Answer
First, convert your comma-separated string to an array. And create raw query.
$fac = request('fac'); // single value or comma saperated string
$data = explode(',',$fac);
$str='';
$i=1; // to append AND in query
foreach ($data as $key => $value) {
$str .= 'FIND_IN_SET("'.$value.'" ,fac)';
if($i < count($data)){
$str .=' AND '; // use OR as per use
}
$i++;
}
Now $str will contain raw query
FIND_IN_SET("1", fac) AND FIND_IN_SET("7", fac)
and you can use in eloquent.
->whereRaw($str)->get();
