Php 如何在yii2中将MySql查询传递给ActiveDataProvider

Php 如何在yii2中将MySql查询传递给ActiveDataProvider,php,mysql,yii2,Php,Mysql,Yii2,我有一个带有连接的mysql查询,它工作得非常好。我想将结果传递给Yii2 ActiveDataProvider。 我的控制器代码看起来像 ` 和查看文件代码` ListView::widget([ 'dataProvider' => $ActiveDataProvider, 'options' => [ 'tag' => 'div', 'class' => 'list-wrapper

我有一个带有连接的mysql查询,它工作得非常好。我想将结果传递给Yii2 ActiveDataProvider。 我的控制器代码看起来像

`

和查看文件代码`
    ListView::widget([
        'dataProvider' => $ActiveDataProvider,
        'options' => [
            'tag' => 'div',
            'class' => 'list-wrapper',
            'id' => 'list-wrapper',
        ],
        'pager' => [
            'firstPageLabel' => 'first',
            'lastPageLabel' => 'last',
            'prevPageLabel' => '<span class="glyphicon glyphicon-chevron-left"></span>',
            'nextPageLabel' => '<span class="glyphicon glyphicon-chevron-right"></span>',
             'maxButtonCount' => 3,
        ],
        // 'layout' => "{pager}\n{items}\n{summary}",
        'summary' => false,
        'itemView' => '_list',
    ]);
    ?>`
ListView::widget([
“dataProvider”=>$ActiveDataProvider,
“选项”=>[
“tag'=>“div”,
“类”=>“列表包装器”,
“id'=>“列表包装器”,
],
“寻呼机”=>[
'firstPageLabel'=>'first',
'lastPageLabel'=>'last',
“prevPageLabel'=>”,
“nextPageLabel'=>”,
“maxButtonCount”=>3,
],
//'layout'=>“{pager}\n{items}\n{summary}”,
“摘要”=>错误,
“项目视图”=>“\u列表”,
]);
?>`

由于我已经传递了QueryAll,所以ActiveDataProvider没有运行并传递错误,“query”属性必须是实现QueryInterface的类的实例,例如yii\db\query或其子类“

你没有传递
QueryAll()
,你传递了函数
QueryAll()
的结果,这是一个对象数组。不使用此选项:

$theme = Theme::find();
更改此项:

$query = "SELECT t.*,COUNT(d.id) AS total_downloads FROM `themes` AS T 
                            LEFT JOIN downloads AS D 
                            ON D.theme_id = T.id GROUP 
                            by t.id ORDER BY total_downloads DESC LIMIT 6";
致:

不要使用
queryAll()
,只需将
$theme
对象作为
query
param do
ActiveDataProvider
传递即可

并删除此项:

        $connection=Yii::$app->db;  
        $trends = $connection->createCommand($query);
        $model = $trends->queryAll();
        $object = (object) $model;

很抱歉,我忘了提。我没有使用$theme=theme::find();然而我被下面的代码卡住了。这就是为什么我告诉你应该做什么。正如你所看到的,我使用了连接,所以我想使用自定义sql查询。不,你仍然不想使用自定义sql查询。而不是使用
$theme->joinWith('relationName')如果不使用框架,那么使用框架的目的是什么?queryAll()有什么问题?不要使用queryAll(),只需将$theme对象作为查询参数do ActiveDataProvider传递。
$theme->select = 'YOUR SELECT HERE';
        $connection=Yii::$app->db;  
        $trends = $connection->createCommand($query);
        $model = $trends->queryAll();
        $object = (object) $model;