2016-07-28 11:47:02 4399次浏览 2条回答 2 悬赏 10 金钱

可以得到里面的 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

最佳答案

  • 飘逸 发布于 2016-07-28 12:13 举报

    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,
            ]);
        }
    

    再次强调下一个非常关键的一点:
    对于数据提供者你可以在权威指南的 显示数据-》数据提供器 章节中得到详细的描述。

  • 回答于 2016-07-28 12:08 举报
    $data = $dataProvider->getModels();
    foreach ($data as $key=>$value)
    {
        var_dump($value->attributes);
    }
    

    看看是不是你要的

    2 条回复
    回复于 2016-07-28 15:51 回复

    感谢大神,就是我要的结果,看在楼下码了那么多字的份上给楼下分了

    回复于 2016-07-28 16:23 回复

    应该的,楼下比我说的详细多了,我也学习了、、、

您需要登录后才可以回答。登录 | 立即注册
米粒
助理

米粒

注册时间:2016-10-31
最后登录:2017-06-01
在线时长:0小时18分
  • 粉丝4
  • 金钱180
  • 威望0
  • 积分180

热门问题