如何在 Yii2 中使用多列创建 & 分组 OR LIKE 查询?

How to create & group OR LIKE query with multiple columns in Yii2?

如何使用查询生成器在 Yii2 中创建这样的查询?

SELECT * 
FROM blog 
WHERE status = 1 AND (
    author_username LIKE '%Steve%' 
    OR author_first_name LIKE '%Steve%' 
    OR author_last_name LIKE '%Steve%'
)

我正在尝试找到在搜索模型中使用它的正确方法。

有很多方法可以实现这个查询:

  1. 使用PDO:

    $q='Stev';
    Yii::$app->db->createCommand('
        SELECT * 
        FROM blog 
        WHERE status = 1 AND (
            author_username LIKE :Q 
            OR author_first_name LIKE :Q 
            OR author_last_name LIKE :Q
        )
        ',['Q'=>"%$q%"])
        ->queryAll();
    
  2. 使用yii\db\Query:

    $condition = [
        'OR',                               //Operand (C1 OR C2)
        [                                   //Condition1 (C1) which is complex
            'OR',                           //Operand (C1.1 OR C1.2)
            ['like','author_username',$q],  //C1.1
            ['like','author_first_name',$q] //C1.2
        ],
        ['like','author_last_name',$q]      //Condition2(C2)
    ];
    
    (new yii\db\Query())
        ->from('blog')
        ->andWhere('status = 1')
        ->andWhere($condition)
        ->all();
    
  3. 使用ActiveRecord (ActiveQuery):

    Blog::find()
    ->active()
    ->andWhere($condition)
    ->all();
    

您可以使用 QueryBuilder:

测试您的查询
var_dump(Yii::$app->db->queryBuilder->build($your_query));

在 yii2 中,您可以使用 Yii::$app->db->createCommand 来 运行 您的 mysql 查询。

1.对于SELECT操作:

1.1 获取所有记录:

Yii::$app->db->createCommand($mysqlquery)->queryAll();

1.2 获取单条记录

Yii::$app->db->createCommand($mysqlquery)->queryOne();

2。对于 UPDATE/DELETE

Yii::$app->db->createCommand($mysqlquery)->execute();