Yii2 условие с подзапросом

Как вы пишете этот SQL-запрос в Yii2?

SELECT * FROM table
WHERE column1 IN (SELECT column2 FROM table WHERE column1 = 5)

5 ответов

Допустим, ваша модель названа YourModel представляющий таблицу с именем table, Тогда запрос будет:

$subQuery = YourModel::find()->select('column2')->where(['column1' => 5]);
$query = YourModel::find()->where(['column1' => $subQuery]);
$models = $query->all();

Также аналогичный вопрос задавался ранее.

Yii::$app->db->createCommand('SELECT * FROM table
       WHERE column1 IN (SELECT column2 FROM table WHERE column1 = :val)', [':val' => 5])->queryAll();

Вернет ассоциативный массив, например ['id' => 1, 'name' => 'Victor']

Ты можешь это сделать:

$query = 'SELECT * FROM table
          WHERE column1 IN (SELECT column2 FROM table WHERE column1 = 5)';

$list = $model::findBySql($query)->all();

Или же:

$subquery = $model::find()->select('column1');
$query = $model::find()->where(['not in',$subquery])->all();

В этом случае это то же самое. Я надеюсь, что помогу тебе

Yii2 SubQuery:

$query=YourBaseModel::find()->select('p_id');
$subquery=YourSubMOdel::find()->Where(['in','p_id',$query])->andWhere(['column1'=>1])->one();

$query => выберите значение p_id в YourBaseModel. Значение p_id хранится в переменной $query. А затем проверьте значение $query в YourSubModel.

Это много способов для решения вашей проблемы. Я приведу пример наиболее правильного с точки зрения использования фреймворка yii2.

SQL:

SELECT * 
FROM table 
WHERE 
    column1 IN 
    (SELECT column2 
        FROM table
        WHERE column1 = 5)

Yii2 activerecord:

$subQuery = TableModel::find()->select('column2')->where(['column1' => 5]);
$result = TableModel::find()->where(['IN', 'column1', $subQuery])->all();
Другие вопросы по тегам