如何在Yii2中创建并分组或具有多个列的LIKE查询?

问题描述 投票:0回答:2

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

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

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

mysql sql yii2
2个回答
2
投票

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

  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));

0
投票

在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();
© www.soinside.com 2019 - 2024. All rights reserved.