GridView中的$dataprovider 我能用用其他方式通过里面的query取得数据吗? [ 2.0 版本 ]
可以得到里面的 query 不过不知道怎么操作这个直接得到数据(也可以转成数组就是不知道怎么直接操作,下面是复制的一部分)
yii\db\ActiveQuery Object
(
[sql] =>
[on] =>
[joinWith] => Array
(
[0] => Array
(
[0] => Array
(
[0] => biz1
[1] => biz2
[2] => biz3
)
[1] => 1
[2] => LEFT JOIN
)
)
[select] =>
[selectOption] =>
[distinct] =>
[from] =>
[groupBy] =>
[join] =>
[having] =>
[union] =>
[params] => Array
最佳答案
-
dataProvider,顾名思义,数据提供者。
但是这个提供者还需要一个数据源。那个数据源在你这里便是$query了,但是$query仅仅只是个数据源。提供者或许还会对这个数据源进行一些处理比如默认排序,当然你的排序也可以在$query里声明,所以你最终的数据是$dataProvider提供的,而不是$query。这点切记。
对于数据提供者你可以在权威指南的 显示数据-》数据提供器 章节中得到详细的描述。
而你的需求是,在$dataProvider传入到view渲染整个view之前获取其最终结果。
以GII用yii\data\ActiveDataProvider生成的$dataProvider为例:
在视图中你可以看到如下的代码
use app\models\Model; public function actionIndex() { $searchModel = new Model(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); return $this->render('index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, ]); }
$dataProvider是代表着最终数据的未经处理的数据源了,如果你想要提前获取其结果。
你可以在$dataProvider = 之后:$model = $dataProvider->getModels(); //getModels()是数据提供者的一个获取最终执行结果的方法。对于不同的提供器返回不同的类型的值。
这里的$model代表着对$query分完页排完序之后的$dataProvider的最终执行结果。
它是Model实例的数组。你在处理的时候可以以foreach循环外层数组,以obj->attribute输出其属性。所以最终的代码看起来是酱紫的:
use app\models\Model; public function actionIndex() { $searchModel = new Model(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); $model = $dataProvider->getModels(); foreach ($model as $v) { echo $v->id . '<br>'; //....... } //...... die; return $this->render('index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, ]); }
再次强调下一个非常关键的一点:
对于数据提供者你可以在权威指南的 显示数据-》数据提供器 章节中得到详细的描述。飞行器的执行周期 觉得很赞
其他 1 个回答
米粒
注册时间:2016-10-31
最后登录:2017-06-01
在线时长:0小时18分
最后登录:2017-06-01
在线时长:0小时18分
- 粉丝4
- 金钱180
- 威望0
- 积分180