where(function ($q) use ($field, $search) { foreach ($field as $f) { $f = str_replace('?', '\?', $f); if (is_array($f)) { $q->orWhereRaw( sprintf('UPPER(CONCAT(%s)) LIKE UPPER(?)', collect($f)->map(function ($q) { return "`$q`"; })->implode(', \' \', ')), ["%$search%"] ); } else { $q->orWhereRaw("UPPER(`$f`) LIKE UPPER(?)", ["%$search%"]); } } }); } return $query; } }