Search code examples
phpyii2yii2-advanced-appyii2-basic-app

SQLSTATE[HY093]: Invalid parameter number: Columns/Parameters are 1-based - yii2


I am trying to perform filter/search among multiple columns. I am stuck with this error:

SQLSTATE[HY093]: Invalid parameter number: Columns/Parameters are 1-based

Any idea what is it? The below code is my search model.

My Code:

$combo = explode('.',$this->storeNamesCombo);

$storeClasses = ArrayHelper::map(StoreClasses::find()->all(), 'id', 'name');
$storeFamilies = ArrayHelper::map(StoreFamilies::find()->all(), 'id', 'name');
$storePlatforms = ArrayHelper::map(StorePlatforms::find()->all(), 'id', 'name');

$mc_search = [];
$mf_search = [];
$mp_search = [];

foreach($combo as $item){
    $temp_mc = array_search($item, $storeClasses);
    if($temp_mc !== False){ $mc_search[] = $temp_mc; }

    $temp_mf = array_search($item, $storeFamilies);
    if($temp_mf !== False){ $mf_search[] = $temp_mf; }

    $temp_mp = array_search($item, $storePlatforms);
    if($temp_mp !== False){ $mp_search[] = $temp_mf; }
}


if(!empty($mc_search)){
    foreach($mc_search as $item){
        $query->andFilterWhere(['or', '"storeNames"."classId"' => $item]);    
    }

}
if(!empty($mf_search)){
    foreach($mf_search as $item){
        $query->andFilterWhere(['or', '"storeNames"."familyId"' => $item]);    
    }
}
if(!empty($mp_search)){
    foreach($mp_search as $item){
        $query->andFilterWhere(['or', '"storeNames"."platformId"' => $item]);
    }
}

if(!empty($combo)){
    foreach($combo as $item){
        $query->where(['ilike', '"storeNames"."subFamilyName"', $item],
            ['ilike', '"storeNames"."variantName"', $item]);
    }
}

Solution

  • Change your last statement to this:

    if(!empty($combo)){
        foreach($combo as $item){
            $query->andWhere([
                'or',
                ['ilike', '"storeNames"."subFamilyName"', $item],
                ['ilike', '"storeNames"."variantName"', $item]
            ]);
        }
    }