【问题标题】:Yii2 - Generate ActiveRecord Query with AND + Multiple ORYii2 - 使用 AND + 多个 OR 生成 ActiveRecord 查询
【发布时间】: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


    【解决方案1】:

    你应该试试这个:

    $condition = ['or'];
    foreach ($cols as $col) {
        $condition[] = ['like', $col, $value];
    }
    $query->andFilterWhere($condition);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      相关资源
      最近更新 更多