Как построить этот sql запрос с помощью queryBuilder в Yii2? - PullRequest
0 голосов
/ 16 июня 2020

Как я могу получить следующий запрос в структуре Yii2 с помощью queryBuilder? Я хочу использовать формат оператора, но не понимаю, что мне делать с условием ИЛИ ...

SELECT "user_data".* FROM "user_data" LEFT JOIN "user" ON "user_data"."user_id" = "user"."id" WHERE (create_date <=  NOW() - INTERVAL '1 WEEK') AND ((("user_id"='1') and ("last_visit" IS NULL))  OR ("email_status"=0));

Сейчас мой код выглядит так:

UserDataModel::find()
            ->joinWith('user')
            ->where("create_date <=  NOW() - INTERVAL '1 WEEK'")
            ->andWhere(
                [
                    'and',
                    ['is', 'last_visit', null],
                    ['in', 'user_id', $array],
                    ['or', ['email_status' => self::STATUS_INACTIVE]],
                ]
            )
            ->createCommand()->getRawSql();

И этот код генерирует такой запрос:

SELECT "user_data".* FROM "user_data" LEFT JOIN "user" ON "user_data"."user_id" = "user"."id" WHERE (create_date <=  NOW() - INTERVAL '1 WEEK') AND (("last_visit" IS NULL) AND ("user_id"='1') AND ("email_status"=0))

Как исправить?

1 Ответ

2 голосов
/ 16 июня 2020

Вам нужно вложить условия таким образом:

UserDataModel::find()
    ->joinWith('user')
    ->where("create_date <=  NOW() - INTERVAL '1 WEEK'")
    ->andWhere([
        'or'
        [
            'and',
            ['is', 'last_visit', null],
            ['in', 'user_id', $array],
        ],
        ['email_status' => self::STATUS_INACTIVE],
    ])
    ->createCommand()
    ->getRawSql();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...