yii2-Активная запись с не в состоянии

Я работаю над yii2, Я использую активную запись для поиска ссылочного номера. Запрос ниже

$q = isset($_GET['q']) ? $_GET['q'] : '';
    if(empty($q)) exit;
    $ser = Survey::find()->where("ref_no like '%$q%'")->andWhere(['status'=>1])->asArray()->all();

    return json_encode($ser);

Приведенный выше запрос получит все справочные номера, которые есть в таблице опроса. Теперь я хочу добавить NOT IN состояние. Необработанный запрос ниже

...... where ref_no LIKE '%$q%' NOT IN (select ref_no from installations where ref_no LIKE '%q%')

Как я могу добавить это к моей активной записи запроса?

Любая помощь будет высоко оценен.

2 ответа

Решение

Измените ваш запрос, как показано ниже:

$ser = Survey::find()->where("ref_no like '%$q%'")
->andWhere(['status'=>1])
->andWhere("ref_no NOT IN (select ref_no from installations where ref_no LIKE '%q%')")
->asArray()->all();

ИЛИ ЖЕ

$ser = Survey::find()
->where("ref_no like '%$q%' AND ref_no NOT IN (select ref_no from installations where ref_no LIKE '%q%')")
->andWhere(['status'=>1])
->asArray()->all();

Вы также можете использовать подзапрос для этого (при условии, что ваша таблица установки связана с моделью Установок)

  $subQuery = Installations::find()->select('ref_no')->where("ref_no like '%$q%'");
  $query = Survey::find()->where(['not in', 'ref_no', $subQuery]);
  $models = $query->all();                         
Другие вопросы по тегам