22

How can I convert this sql into active record query

SELECT * FROM `base_twitter` WHERE id NOT IN (SELECT base_id from base_followers)
arogachev
  • 33,150
  • 7
  • 114
  • 117
Ngoun Thavy
  • 437
  • 2
  • 5
  • 8

3 Answers3

67

Assuming that your models are named BaseTwitter and BaseFollower accordingly, this should work:

$subQuery = BaseFollower::find()->select('id');
$query = BaseTwitter::find()->where(['not in', 'id', $subQuery]);
$models = $query->all();
arogachev
  • 33,150
  • 7
  • 114
  • 117
13
// SELECT * FROM (SELECT * FROM `user` WHERE `active` = 1) `activeusers`;
$subquery = (new \yii\db\Query)->from('user')->where(['active' => true])
$query = (new \yii\db\Query)->from(['activeusers' => $subquery]);

// subquery can also be a string with plain SQL wrapped in parenthesis
// SELECT * FROM (SELECT * FROM `user` WHERE `active` = 1) `activeusers`;
$subquery = "(SELECT * FROM `user` WHERE `active` = 1)";
$query = (new \yii\db\Query)->from(['activeusers' => $subquery]);
Oleg
  • 7,070
  • 4
  • 47
  • 49
3

Try This Query

$models = BaseTwitter::find()->where('id NOT IN (SELECT base_id from base_followers)')->all();
Yasin Patel
  • 5,624
  • 8
  • 31
  • 53