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();