【发布时间】:2015-09-23 11:46:35
【问题描述】:
我正在尝试动态生成一个允许以下列方式进行有条件搜索的查询
SELECT * FROM model WHERE col1=val1 AND (col2 LIKE '%val2%' OR col3 LIKE '%val2%');
或
SELECT * FROM model WHERE col2 LIKE '%val2%' OR col3 LIKE '%val2%';
取决于初始条件以及数组中有 n x coln 值的位置。
目前我有一些类似的东西。
if ($condition1) {
$query = Model::find()->where(['col1' => $val]);
} else {
$query = Model::find();
}
foreach ($cols as $col) {
$query->andFilterWhere(['or',['like', $col, $value]]);
}
$dataProvider = new ActiveDataProvider(['query' => $query]);
但是,当$condition1 为真时,它给出了一个底层查询结构
SELECT * FROM model WHERE col1=val1 AND col2 LIKE '%val2%' AND col3 LIKE '%val2%';
或者当$condition1为假时,
SELECT * FROM model WHERE col2 LIKE '%val2%' AND col3 LIKE '%val2%';
当val2 被填充时,它过于严格,不会返回任何东西。
并且使用$query->orFilterWherewhen $condition1 == true 给出了一个底层结构
SELECT * FROM model WHERE col1=val1 OR col2 LIKE '%val2%' OR col3 LIKE '%val2%';
或者当!$condition1
SELECT * FROM model WHERE col2 LIKE '%val2%' OR col3 LIKE '%val2%';
val2 将返回时过于宽松,会返回不需要的结果。
如何遍历额外列的数组并将它们作为coln LIKE $value 子句附加到 SQL 语句?
【问题讨论】:
标签: php activerecord yii2