带有空参数的 Yii2 搜索抛出所有记录

Yii2 search with empty param throws all records

view2.php 中有 3 个搜索字段,当我在搜索字段中输入内容并点击搜索按钮时,搜索工作正常。但问题是当我点击 search/Enter 按钮而没有在搜索字段中输入任何内容时,它会显示数据库中与该模型相关的所有条目。

下面是我的机器型号:

     public function search($params)
    {       

        $query = Supplier::find();
         $query->joinWith(['user', 'cities', 'industrialareas','supplierMachines', 'subCategory', 'types0','supplierCertificates' ]);

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
             'pagination' => [
                      'pageSize' => 20,
                  ],
         ]);       

        if (!($this->load($params) && $this->validate())) {
        $query->where('1 <> 1');
        }
        else {

        // grid filtering conditions
        $query->andFilterWhere([
            'id' => $this->id,
            'yoe' => $this->yoe,
         ]);


        $query->andFilterWhere(['like', 'company_constitution', $this->company_constitution])
            ->andFilterWhere(['like', 'street', $this->street])
            ->andFilterWhere(['like', 'locality', $this->locality])

            }

        return $dataProvider;
    }
}

调用 view2 函数的机器控制器(它显示搜索字段)

    public function actionView2()
    {
 //Display machines based on the customer search

    $searchModel = new SupplierMachineSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    // render
    return $this->render('view2', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

View2.php

    <?= $form->field($searchModel, 'enter_city')->widget(AutoComplete::classname(), [
'options' => ['placeholder' => 'Select a city ...', 'class' => 'form-control'],
'clientOptions' => [
'source' => ArrayHelper::getColumn($data, 'city_name'), ],
]) ?> 

<?= $form->field($searchModel, 'enter_iarea')->widget(AutoComplete::classname(), [
'options' => ['placeholder' => 'Select a iarea ...', 'class' => 'form-control'],
'clientOptions' => [
'source' => ArrayHelper::getColumn($data1, 'iarea_name'), ],
]) ?> 

<?= $form->field($searchModel, 'machine')->widget(AutoComplete::classname(), [
'options' => ['placeholder' => 'Select a iarea ...', 'class' => 'form-control'],
'clientOptions' => [
'source' => ArrayHelper::getColumn($all,     'name' ), ],
]) ?> 


     <?= Html::activeHiddenInput($searchModel, 'id')?>


     <div class="form-group">
        <?= Html::submitButton('Apply', ['class' => 'btn btn-success']) ?>
       <?=  Html::a('Reset', ['view2']);?>
       </div>

    <?php ActiveForm::end(); ?>
</div>
<?=
 ListView::widget([
    'dataProvider' => $dataProvider,
    'itemView' => '_viewmain',

        'viewParams' => [
        'fullView' => false,
        'context' => 'main-page',

    ],
]);

检查加载后的搜索参数是否为空:

if ( !($this->load($params) && $this->validate()) or
      (empty($this->search_param1) and empty($this->search_param2) and empty($this->search_param3)) ) {
    $query->where('1 <> 1');
}