我试图使用Laravel的ORM口才来查询一个MySQL表(我猜有点无关紧要)。表中有一个名为quantitative的字段,它包含格式为[{name: 'a', value: 3}, {name: 'b', value: 4}]的JSON。
我希望用户能够查询所有包含他以任何顺序指定的值的条目。
AllowedFilter::callback('quantitative', function (Builder $query, $value) {
$quantitative = collect($value)->filter(function ($el) {
return isset($el['value']);
})->pluck('value')->map(function ($el) {
return "(?=.*{$el})";
})->implode('');
$query->where('quantitative', 'regexp', "({$quantitative}).*");
}),使用regex (?=.*a)(?=.*b).*生成查询的
SELECT count(*) as aggregate from `table` where `quantitative` regexp ((?=.*a)(?=.*b)).* (...)它会产生以下错误:
SQLSTATE42000:语法错误或访问冲突:从regexp获得了“重复操作数无效”错误
Regex本身在regex101.com验证时运行良好,我遇到的问题是它对MySQL语法无效。是否有任何方法使其工作或使用不同的正则表达式来完成任务?
发布于 2020-02-25 23:27:36
似乎这两种方法都能奏效:
LIKE '%a%b%'
REGEXP 'a.*b'请提供应该匹配的字符串的简短列表和不应该匹配的短列表。
如果您试图在JSON字符串中找到东西,我建议您选择
REGEXP和类似的东西太疯狂了。注意,[{name: 'b', value: 4}]包含一个a和一个b。
https://stackoverflow.com/questions/60390625
复制相似问题