Я пытаюсь запросить таблицу MySQL, используя Laravel ORM Eloquent (я думаю, это не имеет значения). У меня в таблице есть поле с именем quantitative
, которое содержит JSON в формате [{name: 'a', value: 3}, {name: 'b', value: 4}]
.
Я хочу, чтобы пользователь мог запрашивать все записи, содержащие значения, которые он указал в любом порядке.
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}).*");
}),
, который генерирует запрос (ниже) с использованием регулярного выражения (?=.*a)(?=.*b).*
SELECT count(*) as aggregate from `table` where `quantitative` regexp ((?=.*a)(?=.*b)).* (...)
Выдает следующую ошибку:
SQLSTATE [42000]: синтаксис ошибка или нарушение прав доступа: 1139 Ошибка 'операнд оператора повторения недействителен' от regexp
Regex сам по себе работает нормально, когда я проверяю его на regex101.com, проблема у меня заключается в том, что это не так действителен для MySQL синтаксиса. Есть ли способ заставить его работать или использовать другое регулярное выражение для выполнения sh задачи?