Search code examples
phpmysqlarraysyiicgridview

How implement CArrayDataProvider in Yii


I'm new to Yii. I'm using CArrayDataProvider to pass data in my CGridView but I'm getting an error of undefined id. Can you help me to check if I missed something?

index.php (View)

$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $arrayDataProvider,
'columns' => array(
    array(
        'name' => 'LastName',
        'type' => 'raw',
                        'value' => 'CHtml::encode($data["LastName"])'
    ),
    array(
        'name' => 'FirstName',
        'type' => 'raw',
        'value' => 'CHtml::link(CHtml::encode($data["FirstName"])',
    ),
),
));

RecordsController.php

public function actionIndex()
{  

        $data = new TblAccountdetails();
        $rawData = $data->getAllData();
        $arrayDataProvider=new CArrayDataProvider($rawData, array(
                'id'=>'id',
                'pagination'=>array(
                        'pageSize'=>10,
                ),
        ));

        $params =array(
                'arrayDataProvider'=>$arrayDataProvider,
        );

        if(!isset($_GET['ajax'])) $this->render('index', $params);
        else  $this->renderPartial('index', $params);
}

My Model Function

public function getAllData()
    {
         $user = Yii::app()->db->createCommand()
            ->select('AID, LastName, FirstName')
            ->from('tbl_accountdetails')
            ->queryAll();
        return $user;
    }

Vardump of $arrayDataProvider

  object(CArrayDataProvider)#32 (11) {
  ["keyField"]=>
  string(2) "id"
  ["rawData"]=>
  array(3) {
    [0]=>
    array(3) {
      ["AID"]=>
      string(1) "1"
      ["LastName"]=>
      string(8) "Floresca"
      ["FirstName"]=>
      string(5) "Joene"
    }
    [1]=>
    array(3) {
      ["AID"]=>
      string(1) "2"
      ["LastName"]=>
      string(13) "aaaaaaaaaaaaa"
      ["FirstName"]=>
      string(12) "aaaaaaaaaaaa"
    }
    [2]=>
    array(3) {
      ["AID"]=>
      string(1) "3"
      ["LastName"]=>
      string(7) "Antonio"
      ["FirstName"]=>
      string(4) "Noel"
    }
  }
  ["caseSensitiveSort"]=>
  bool(true)
  ["_id":"CDataProvider":private]=>
  string(2) "id"
  ["_data":"CDataProvider":private]=>
  NULL
  ["_keys":"CDataProvider":private]=>
  NULL
  ["_totalItemCount":"CDataProvider":private]=>
  NULL
  ["_sort":"CDataProvider":private]=>
  NULL
  ["_pagination":"CDataProvider":private]=>
  object(CPagination)#33 (9) {
    ["pageVar"]=>
    string(7) "id_page"
    ["route"]=>
    string(0) ""
    ["params"]=>
    NULL
    ["validateCurrentPage"]=>
    bool(true)
    ["_pageSize":"CPagination":private]=>
    int(10)
    ["_itemCount":"CPagination":private]=>
    int(0)
    ["_currentPage":"CPagination":private]=>
    NULL
    ["_e":"CComponent":private]=>
    NULL
    ["_m":"CComponent":private]=>
    NULL
  }
  ["_e":"CComponent":private]=>
  NULL
  ["_m":"CComponent":private]=>
  NULL
}

I don't know where I get that undefined id error:(


Solution

  • 1.one way is to change

    ->select('AID, LastName, FirstName')

    into

    ->select('AID as id, LastName, FirstName')

    2.you can also set keyField this way

    $arrayDataProvider=new CArrayDataProvider($rawData, array(
                'id'=>'nameThisProvider',
                'keyField' => 'AID'
                'pagination'=>array(
                        'pageSize'=>10,
                ),
    ));
    

    3.you could use a CSqlDataProvider