CGridview and 1-to-1 relationship

Hi guys,

I jsut started learning Yii for last few days and I stuck on this problem.

Relationships are as follows:

Brokerage has many Agents and an agent belongs to a brokerage

An Agent belongs to A person and a person has one agent.

 $dataProvider = new CArrayDataProvider($data=$model->agents, $config);

	$this->widget('zii.widgets.grid.CGridView', array(




				'name' => 'First Name',

				'value' => '$data->person->first_name',



				//display a column with "view", "update" and "delete" buttons





I got the error -> Property "" is not defined.

If I run the code below,

     $agents = $model->agents;

	foreach($agents as $agent)








I got what i want without error. Why the CGridView give me [Property "" is not defined] error ?


CArrayDataProvider need ID to identification unique column value for ID CGridView

This is my Example code using CArrayData Provider

		$count=Yii::app()->db->createCommand('select count(*) from project_request where project_sts_id=3')->queryScalar();

		$sql="select t.project_no as id, t.project_no, b.project_name,

			sum(case when engpack_type='3D' then 1 else 0 end) 3d,

			sum(case when engpack_type='2D' then 1 else 0 end) 2D,

			sum(case when engpack_type='TOR' then 1 else 0 end) tor,

			sum(case when engpack_type='OE' then 1 else 0 end) oe

			 from project_eng_pkg t, project b

			 where t.project_no=b.project_no

			 group by t.project_no";

		$dataProvider=new CSqlDataProvider($sql, array(





		             'id','project_no', 'project_name', 'tor', 'oe', '2d', '3d'




					'pageSize'=> Yii::app()->user->getState('pageSize',Yii::app()->params['defaultPageSize']),



I’ve been working in the #yii channel with the OP, we found the problem.

Original code:

$config = array();

$dataProvider = new CArrayDataProvider($data=$model->agents, $config);

	$this->widget('zii.widgets.grid.CGridView', array(



But because he didn’t use ‘id’ as the primary key to his tables, we have to tell the CArrayDataProvider about it.

Rewritten code is:

$dataProvider = new CArrayDataProvider($model->agents, array(

    'keyField' => 'agent_id'     // Agent primary key here


$this->widget('zii.widgets.grid.CGridView', array(

    'dataProvider' => $dataProvider,

    'columns' => array(...

This is one of the many reasons why it’s such a good idea to universally use ‘id’ as your database table primary keys.

This solved my problem. Thumb up for Steve