Раствор 1
$query = new Model;
foreach($arr as $condition){
$query->where($condition[0], $condition[1], $condition[2]);
}
$query->get();
Это создаст запрос например,
Select * from table where published = 1 and id = 1;
Здесь вы можете видеть, что значения не находятся в скобках, так как они не являются комбинированным результатом.
Решение 2
Это решение позволит создать комбинированный для того, где статьи и конечный результат будет в скобках
$query = new Model;
$query->where(function($q) use ($arr){
foreach($arr as $condition){
$q->where($condition[0], $condition[1], $condition[2]);
}
}
$query->get();
Это приведет к точному запросу, что вы достигли.Это происходит потому, что решение расстройство того, что происходит внутри вашего запроса $ this-> модели-> где ($ обр)
Select * from table where (published = 1 and id = 1);
ПРИМЕЧАНИЕ
Для дальнейшего узнать, почему это происходит посмотрим на следующие пример
Select * from table where (id = 2 or product_id = 3) and (publish = 1 and status = 2)
С помощью этого запроса вы можете увидеть, что он представляет собой смесь из раствора 1 и раствора 2. вы решаете это
$query = new Model;
$query->where(function($q) use($input) {
$q->where('id', '=', $input['id1'])
->orWhere('id' , '=', $input['id2']);
}
До сих пор мы создали следующий результат
Select * from table where (id = 1 or id = 2)
Теперь, чтобы добавить следующую часть запроса мы следующие
//continued from above
//$query has the above condition which can be continued after the first where for chaining or in next line.
$query->where(function($q) use($input){
$q->where('publish' ,'=', 1)->where('status','=',1);
}
Теперь с этим, окончательный запрос становится тот, который мы обязательный. Надеюсь, теперь понятно, почему были добавлены скобки.
Я был бы прав, думая, что вы хотите передать любые значения в массиве на ваш 'where'? Например, если у вас есть '[['col', '=', 'val']]', это приведет к '$ model-> где ('col', '=', 'val')'? – Jonathon
Да, это правильно, и я уже могу это сделать с помощью $ model-> where ($ arr); но проблема заключается в том, что он вызывает скобки вокруг моего предложения where. Почему это делает это и что означают скобки? – panthro
Попробуйте удалить назначение так: $ model = $ model-> где (...); 'становится' $ model-> где (...); '. Это что-то делает? Вы часто получаете скобки вокруг где клаузулы, когда вы делаете что-то вроде '$ model-> где (function ($ query) {// Extra where clauses});' – Jonathon