ActiveDataProvider:“query”属性必须是实现QueryInterface的类的实例

时间:2015-03-30 10:29:30

标签: yii yii2 yii-extensions

我正在使用一个自定义的函数来封装findBySql()来返回行。但是标题中显示了错误。但如果我测试使用自己定义的封装findu()的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()更改位操作并实现相同的效果吗?

2 个答案:

答案 0 :(得分:3)

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

->all()方法中删除findValid()次来电,它应该有效。

P.S。我强烈建议您重构代码,以便更好地调整条件。

官方文档:

答案 1 :(得分:1)

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

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

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