我正在学习Yii2,当我使用自定义查询列出时,我收到错误:
"查询" property必须是实现QueryInterface的类的实例,例如yii \ db \ Query或其子类。
我从查询中获取数据但是当我输入dataprovider时它给了我错误。这是我的代码:
public function search($params) {
//$query = User::find();
$query = new \yii\db\Query;
$query = $query->select(['user.*','tbl_region.id','tbl_region.regionName'])
->from('user')
->join('LEFT JOIN','tbl_men_reg_info','tbl_men_reg_info.userID = user.id')
->join('LEFT JOIN','tbl_women_info','tbl_women_info.userID = user.id')
->join('LEFT JOIN','tbl_region','tbl_men_reg_info.region = tbl_region.id');
$command = $query->createCommand();
$query = $command->queryAll();
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
return $dataProvider;
}
有人可以告诉我如何使用自定义查询进行列表吗?
答案 0 :(得分:1)
错误很明显,您需要将yii\db\Query
的实例传递给数据提供者,因此请删除以下行:
$command = $query->createCommand();
$query = $command->queryAll();
它应该有用。
请注意,您还需要使用SqlDataProvider
代替ActiveDataProvider
,因为不涉及模型。
同样修改具有不同类型和含义的变量被认为是不好的做法:
$query = $command->queryAll();
此时不是$query
,最好将其重命名为$rows
或$results
。