我有一个客户管理项目的新要求,我正在做的是允许用户进行自定义布尔搜索。
基本上允许他们使用:AND,OR,NOT,括号和引号。
实现此目的的最佳方法是什么?我检查了mysql,他们使用不同的语法。
这是测试场景:
要求:搜索具有Elite级别或退伍军人级别且来自新加坡的魔术师或野蛮人
布尔字符串:(“魔术师”或“野蛮人”)和(精英或“退伍军人级别”)和新加坡人
这是我将考虑修改的代码之一,我从Pure PHP based boolean search for strings获得了
function booleanSearch($content, $search) {
$criteria = str_getcsv($search, ' ');
while ($criteria) {
$not = false;
$q = array_shift($criteria);
if (substr($q, 0, 2) === '-"') {
$not = true;
while (substr($q, -1) != '"') {
$q .= " " . array_shift($criteria);
}
$q = substr($q, 2, -1);
}
else if (substr($q, 0, 1) === '-' && strpos($q, ' ') === false) {
$not = true;
$q = substr($q, 1);
}
$found = strpos($content, $q) !== false;
if ($found === $not) {
return false;
}
}
return true;
}
答案 0 :(得分:2)
您只需要一个查询构建器实现。根据你的描述,推出自己的产品将是微不足道的,否则,有许多包装可以让生活更轻松。 Spatie的查询构建器运行良好:https://github.com/spatie/laravel-query-builder