Search code examples
yiiyii2yii-extensions

Outputting values not equal to certain values in yii2


I would like to output variables not equal to certain values but it returns an error of

Failed to prepare SQL: SELECT * FROM `tblsuunit` WHERE `unitid` != :qp0

There are two models the first model where am getting the array of ids

public function actionSunits($id){
    $unitslocation = new Unitslocation();
    $id2 = Unitslocation::find()->where(['officelocationid'=>$id])->all();
      foreach( $id2 as $ids){
      print_r($ids['unitid']."<br>");
      }
    }

This outputs the ids as

8
9
11
12
13
14
16

I would then like to take the id and compare another model(units model) and get the id values not similar to the above and output then

So i have added

 $idall = Units::find()->where(['!=', 'unitid', $ids])->all();

So the whole controller action becomes

public function actionSunits($id){
    $unitslocation = new Unitslocation();
    $id2 = Unitslocation::find()->where(['officelocationid'=>$id])->all(); 


   foreach( $id2 as $ids){
         $idall = Units::find()->where(['!=', 'unitid', $ids])->all();

     }
     var_dump($idall);

}

This is the units model table:

enter image description here

If it were working it should return 7 and 10

What could be wrong..


Solution

  • You should fix your code and simply use a not in condition, e.g. :

    // $uls will be an array of Unitslocation objects
    $uls = Unitslocation::find()->where(['officelocationid'=>$id])->all(); 
    
    // $uids will contain the unitids
    $uids = \yii\helpers\ArrayHelper::getColumn($uls, 'unitid');
    
    // then simply use a not in condition
    $units = Units::find()->where(['not in', 'unitid', $uids])->all();
    
    $idall = \yii\helpers\ArrayHelper::getColumn($units, 'unitid');
    

    Read more about ActiveQuery::where() and ArrayHelper::getColumn().