我有一个带有复选框的表单,我想创建一个查询,例如:
SELECT * FROM table WHERE name = 'name' AND (option = 'check1' OR option = 'check2' OR option = 'check3')
嵌套条件将取决于用户选择的复选框。
我知道或可以找到有关如何执行嵌套条件的示例的唯一方法如下所示:
$select->where->nest
->equalTo('option', 'check1')
->or
->equalTo('option', 'check2')
->or
->equalTo('option', 'check3')
->unnest();
但是,这仅适用于嵌套中包含固定数量的equalTo的情况,而我的情况下的数量将是可变的。我想做这样的事情(其中$ filters是用户选择的复选框值的数组):
$select->where->StartNest();
foreach($filters['check'] as $check){
$select->where->like('option', '%'.$check.'%');
$select->where->or;
}
$select->where->StopNest();
这样有可能吗?还是有更好的方法来解决此问题?
非常感谢您解决这个问题!
编辑:
这是我最终完成此操作的方式。似乎有点骇人听闻,但它现在正在做这项工作:
$strLiteral = '';
foreach($filters['check'] as $check){
$strLiteral .= "options LIKE '%$check%' OR ";
}
$strLiteral = substr($strLiteral, 0, -4); //remove the final ' OR' from string
$select->where->nest
->literal($strLiteral)
->unnest;
这是我最终完成此操作的方式。似乎有点骇人听闻,但它现在正在做这项工作:
$strLiteral = '';
foreach($filters['check'] as $check){
$strLiteral .= "options LIKE '%$check%' OR ";
}
$strLiteral = substr($strLiteral, 0, -4); //remove the final ' OR' from string
$select->where->nest
->literal($strLiteral)
->unnest;
如果有人知道实现此目标的更好方法,请告诉我。谢谢!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句