eniac05
eniac05

Reputation: 491

How to use kartik yii2-export with model in array type

I have query like this in my controller

$dataPendaftar = Pendaftar::find()
            ->select(['pendaftar.*','user.*'])
            ->from('pendaftar') 
            -> leftJoin('user', 'user.id=pendaftar.id_user_pendaftar')
            ->asArray()
            ->all();

    return $this->render('index', [
        'dataPendaftar' =>  $dataPendaftar,
    ]);

and in my view, i try to use kartik yii2-export widget, like this

$gridColumns= [
        'nik_pendaftar',
        'tanggal_lahir',
        'email',


    ];
    echo ExportMenu::widget([
        'dataProvider' => $dataPendaftar,
        'columns' => $gridColumns,
        'fontAwesome' => true,
    ]);

but i got error

Call to a member function getModels() on array

is it possible to use kartik yii2-export widget with model in array instead dataProvider?

Upvotes: 0

Views: 401

Answers (1)

rob006
rob006

Reputation: 22174

ExportMenu:$dataProvider needs to be instance of DataProviderInterface, but you're passing array of models (this is what all() returns). Try this:

$dataPendaftar = new ActiveDataProvider([
    'query' => Pendaftar::find()
        ->select(['pendaftar.*','user.*'])
        ->from('pendaftar')
        ->leftJoin('user', 'user.id=pendaftar.id_user_pendaftar')
]);

return $this->render('index', [
    'dataPendaftar' =>  $dataPendaftar,
]);

Or if you really want to use result of your query, then use ArrayDataProvider:

$dataPendaftar = Pendaftar::find()
        ->select(['pendaftar.*','user.*'])
        ->from('pendaftar') 
        ->leftJoin('user', 'user.id=pendaftar.id_user_pendaftar')
        ->asArray()
        ->all();

return $this->render('index', [
    'dataPendaftar' => new ArrayDataPrivider([
        'allModels' => $dataPendaftar,
    ]),
]);

Upvotes: 1

Related Questions