У меня есть Eloquent\Builder $query
, для которого я хочу использовать дополнительные вызовы where()
, когда количество вызовов является неопределенным и берется из массива $filter
, пример ниже:
$filter = [
'or:email:=:ivantalanov@tfwno.gf',
[
'or:api_token:=:abcdefghijklmnopqrstuvwxyz',
'and:login:!=:administrator',
],
];
Строки, когда анализируются, создают допустимые условия SQL, но проблема заключается в том, чтобы вставить их в замыкания, в которых присутствует группа (например, в строках 2 и 3 - массив является их «группой»).
Я знаю о функциональности Laravel, которая позволяет вставить функцию Closure
в $query->where()
для достижения того, что я хочу, но проблема, с которой я сталкиваюсь, заключается в создании этих сложных замыканий. Я должен перебрать каждую строку в группе и передать ее в сгенерированное замыкание следующим образом (где $item
- результат анализа строки условия):
$closure = function ($query) use ($item)
{
call_user_func_array(
[$query, $item['function']], [$item['field'], $item['operator'], $item['values']]
);
};
Теперь очевидная проблема с этим заключается в том, что, в то время как он легко делает простые замыкания, прохождение более одного условия совершенно невозможно.
У меня вопрос: что я могу использовать для подготовки сложного оператора, который будет выполнен по запросу внутри замыкания?