ActiveDataProvider:"query" 属性 必须是实现 QueryInterface 的 class 的实例
ActiveDataProvider:"query" property must be instance of a class that implements the QueryInterface
我正在使用一个 self-defined 函数将 findBySql() 封装到 return 行。但是出现了标题中显示的错误。但是如果我测试使用 self-defined func that encapsu find() ,它起作用了,为什么?
这是我的操作:
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]);
}
这是 object 贷款的 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,
]);
我正在使用一个 self-defined 函数将 findBySql() 封装到 return 行。但是出现了标题中显示的错误。但是如果我测试使用 self-defined func that encapsu find() ,它起作用了,为什么?
这是我的操作:
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]);
}
这是 object 贷款的 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,
]);