Php Yii2在dataProvider中添加自定义查询,无需多次重写查询

Php Yii2在dataProvider中添加自定义查询,无需多次重写查询,php,activerecord,yii2,Php,Activerecord,Yii2,我在ModelAutosgetSpecialItems()中有一个查询,它在项目中被多次使用,但我需要外接程序控制器来筛选$dataProvider 如何使这个省略在控制器中再次写入相同的查询 Autos.php public function getSpecialItems() { return self::find()->where(['id_category' => 18])->all(); } controller.php publi

我在Model
Autos
getSpecialItems()
中有一个查询,它在项目中被多次使用,但我需要外接程序控制器来筛选$dataProvider

如何使这个省略在控制器中再次写入相同的查询

Autos.php

public function getSpecialItems()
    {

        return self::find()->where(['id_category' => 18])->all();
    }
controller.php

public function actionIndex()
    {
        $searchModel = new AutosSearch();

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

        //need add query here
        //$dataProvider->query->$searchModel->getSpecialItems();

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

您必须在
validate()
之后将过滤器添加到
autosearch()
模型中:


您必须在
validate()
之后将过滤器添加到
autosearch()
模型中:


莱昂尼科:这真的是个好主意吗?如果我想使用默认搜索(),我必须重写另一个搜索()。你可以创建一个特定的模型并从你的基础模型继承它,然后重写搜索方法。Leonico这真的是个好主意吗?如果我想使用默认搜索(),我必须重写另一个搜索()。您可以创建一个特定的模型并从基本模型继承它,然后重写搜索方法。
if (!$this->validate()) {
    // uncomment the following line if you do not want to return any records when validation fails
    // $query->where('0=1');
    return $dataProvider;
}

// grid filtering conditions you need
$query->andFilterWhere([
    'id_category' => 18,
]);