如何使用QueryBuilder在Yii2框架中获得以下查询? 我想使用运算符格式,但我不明白如何处理OR条件。。。
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))
如何修复?
您需要以这种方式嵌套条件:
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();