Yii ActiveDataProvider:";查询「;属性必须是实现QueryInterface的类的实例

Yii ActiveDataProvider:";查询「;属性必须是实现QueryInterface的类的实例,yii,yii2,yii-extensions,Yii,Yii2,Yii Extensions,我正在使用一个自定义func封装findBySql()以返回行。但是得到了标题中显示的错误。但是,如果我测试使用encapsu find()的自定义func,它会起作用,为什么 以下是我的行动: public function actionList() { $model = new Loan(); $dataProvider = new ActiveDataProvider( [ 'query' => $model->findValid(

我正在使用一个自定义func封装findBySql()以返回行。但是得到了标题中显示的错误。但是,如果我测试使用encapsu find()的自定义func,它会起作用,为什么

以下是我的行动:

public function actionList()
{
     $model = new Loan();
     $dataProvider = new ActiveDataProvider(
     [
        'query' => $model->findValid($_GET['type']),//error comes here
        'pagination' => [
                        'pagesize' => '2',
         ],
     ]);

      return $this->renderPartial('list', ['model' => $model, 'dataProvider' => $dataProvider]);
}
以下是对象贷款的findxx函数:

 public function findValid($type=null)
{
    if($type==null){
            return static::findBySql("select * from loan where wmstat&1=1 and (wmstat>>2)&1=0")->all();
    }else{
            return static::findBySql("select * from loan where wmstat&1=1 and (wmstat>>2)&1=0 and origin="."'".$type."'")->all();
    }
}

此外,我可以使用find()和where()更改位运算符并达到相同的效果吗?

错误很明显,
query
需要有效的查询实例,而您传递的是查询结果,而不是查询本身

findValid()
方法中删除
->all()
调用,它应该可以工作

p.S.我强烈建议将代码重构到更好的状态

官方文件:


    • 这里有一个基本代码示例;不使用
      ->all()

      $query = User::find(); 
              $dataProvider = new ActiveDataProvider([
                  'pagination' => ['pageSize' =>5],
                  'query' => $query,
              ]);
      
              return $this->render('index', [
                  'dataProvider' => $dataProvider,
              ]);