可以混合 where() 子句

Possible to mix where() clause

我有以下代码(已缩短,否则显示太长):

Feedback::find()
        ->where(['feedback.fg_id' => $this->id])
        ->orWhere(['feedback.fg_id' => $this->id, 'feedback.closed_time' => NULL, '<' => ['feedback.survey_end_date', new Expression('NOW()')]])
        ->all();

此代码无效,因为 orWhere()

中的最后一条语句

我现在的问题是:如何组合orWhere中的语法?这是因为我需要 or 块中的所有语句。

矛盾的sql代码应该是:

SELECT * FROM feedback WHERE
(feedback.fg_id = 1) OR (feedback.fg_id = 1 AND feedback.closed_time IS NULL AND feedback.survey_end_date < NOW())

是的,您可以将条件组合为...

Feedback::find()
->where(['feedback.fg_id' => $this->id])
->orWhere(['AND',
    ['feedback.fg_id' => $this->id],
    ['feedback.closed_time' => NULL],
    ['<' , 'feedback.survey_end_date', new Expression('NOW()')]
 ]);