Yii2:如何使用andWhere和orWhere的优先级?

Yii2:如何使用andWhere和orWhere的优先级?,yii2,where,query-builder,Yii2,Where,Query Builder,我有一个Yii2查询,但我有或whereYii语句的问题 我需要以下人员: 年龄在21岁以下 或年龄在21岁以上并且名字是约翰 这是我的密码。我不知道如何在Yii2中使用括号表示优先级: Persons::find() ->select([Persons::tableName().".[[first_name]]"]) ->where(['<', 'age', 21]) ->orWhere(['>', 'age', 21]) -&

我有一个Yii2查询,但我有
或where
Yii语句的问题

我需要以下人员:

  • 年龄在21岁以下

  • 年龄在21岁以上
    并且
    名字是约翰

这是我的密码。我不知道如何在Yii2中使用括号表示优先级:

Persons::find()
    ->select([Persons::tableName().".[[first_name]]"])
    ->where(['<', 'age', 21])
    ->orWhere(['>', 'age', 21])
    ->andwhere([Persons::tableName().".[[first_name]]" => 'John'])
Persons::find()
->选择([Persons::tableName().“[[first_name]]”)
->其中([''年龄',21])
->andwhere([Persons::tableName().“[[first_name]]”=>“John']))

最简单的方法是使用一个具有适当嵌套的阵列:

Persons::find()
    ->select([Persons::tableName() . ".[[first_name]]"])
    ->where([
        'or',
        ['<', 'age', 21],
        [
            'and',
            ['>', 'age', 21],
            [Persons::tableName() . ".[[first_name]]" => 'John'],
        ],
    ]);

您可以使用以下代码进行查询:

Persons::find()
    ->select(["first_name"])
    ->where(['<', 'age', 21])
    ->orWhere("age > 21 AND first_name LIKE 'John'")
    ->all();
Persons::find()
->选择([“名字”])
->其中(['
Persons::find()
    ->select(["first_name"])
    ->where(['<', 'age', 21])
    ->orWhere("age > 21 AND first_name LIKE 'John'")
    ->all();
SELECT `first_name` FROM `persons` WHERE (`age` < 21) OR (age > 21 AND first_name LIKE 'John').