CGridView

Ola Pessoal,

Na minha cGridView tenho os seguintes campos:




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

	'id'=>'usuario-grid',

	'dataProvider'=>$model->search(),

	'filter'=>$model,

	'columns'=>array(

		'id',

		'usuario',

		'idLocacao',

		array(

			'class'=>'CButtonColumn',

		),

	),



O idLocacao é uma foreign key para uma tabela das localidade de cada usuário, e na Grid precisa mostrar o nome da localidade.

Alguem sabe como posso fazer isso?

Vlw

Modelo:




array(

'name' => 'idLocacao',

'filter' => CHtml::listData(Localidade::model()->findAll(), 'idLocacao', 'titulo'),

'value'=>'Localidade::Model()->findByPk($data->idLocacao)->titulo',

),

Ae pessoal depois de apanhar muito, existem outras duas soluções,




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

    'dataProvider'=>$model->searchListar(),

    'columns'=>array(

        'Conta.Contrato.operadora', // primeira solução

        array( // segunda solução

            'name'=>'operadora',

            'value'=>'$data->Conta->Contrato->operadora',

        ),

    ),

));



só que para isso funcionar é preciso ter configurado as Relations dentro de cada models

exemplo:

Model Conta:


	public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(

		'Contrato'=>array(self::BELONGS_TO, 'Contrato', 'id_contrato'),

		'Registro'=>array(self::HAS_MANY, 'Registro', 'id_conta'),

		);

	}



Model Contrato:


public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(

			'Empresa' => array(self::BELONGS_TO, 'Empresa', 'id_empresa'),

			'Conta'=>array(self::HAS_MANY, 'Conta', 'id_conta'),

		);

	}



Flw

Boa tarde galera,

Como o tópico tem a ver com a minha dúvida vou aproveita-ló,

Bom, tenho um CGridView, onde no ‘dataProvider’




'dataProvider'=>$model->searchListar(),



eu fiz uma nova função searchListar()




public function searchListar() 

{

	$criteria = new CDbCriteria;

	

	$criteria->distinct = TRUE;

		

	$criteria->select = array('Contrato.operadora', 'Empresa.nome', 'R.mesReferencia', 'R.anoReferencia');

	$criteria->alias = 'R';

	$criteria->join = ' INNER JOIN Conta ON R.id_conta = Conta.id_conta INNER JOIN Contrato ON Conta.id_contrato = Contrato.id_contrato INNER JOIN Empresa ON Contrato.id_empresa = Empresa.id_empresa';

	$criteria->condition = 'Contrato.id_empresa = '.Yii::app()->user->getState('id_empresa').' ';

		

	return new CActiveDataProvider(get_class($this), array(

		'criteria'=>$criteria,

	));

}



até ai tudo certo, no CGridView está aparecendo somente os registros que eu quero, o problema é que no CGridView está informando "Exibindo 1-1 de 10138 resultado(s)." (10138 é a quantidade de registros na tabela) só que para essa query retorna bem menos que essa quantidade, será que faltou alguma coisa na implementação do meu $criteria?

flw abraços!

Boa tarde galera,

Descobri o meu erro…

vou postar o código ai…




public function searchListar() 

{

	$criteria = new CDbCriteria;

	

	$criteria->condition = 'Co.id_empresa = '.Yii::app()->user->getState('id_empresa');//.' AND  R.id = 30';

	$criteria->alias = 'R';

	$criteria->select = array('Co.operadora', 'E.nome', 'R.mesReferencia', 'R.anoReferencia');

	$criteria->join = 'INNER JOIN Conta Ca ON R.id_conta = Ca.id_conta INNER JOIN Contrato Co ON Ca.id_contrato = Co.id_contrato INNER JOIN Empresa E ON E.id_empresa = Co.id_empresa';

	$criteria->group = 'R.anoReferencia';

	$criteria->group = 'R.mesReferencia';

	

	return new CActiveDataProvider(get_class($this), array(

		'criteria'=>$criteria,

	));

}



eu apenas, tirei o distinct e usei o group by

Amigos,

Uma pergunta básica, mais que não estou conseguindo resolver. Tenho uma GridView com um campo Status, no banco de dados para este campo é salvo o valor 0, 1 ou 2. Gostaria de visualizar na grid não esses valores e sim o seguinte: 0 = "DESATUALIDADO", 1 = "ATUALIZADO" e 2 = "EM ANDAMENTO". Como faço isso??

Adrian,

tente fazer assim,

crie o seguinte método no seu model




public function getDescricaoStatus()

{

   switch ($this->status) 

   {

      case 0:

         return 'DESATUALIZADO';

         break;

      case 1:

         return 'ATUALIZADO';

         break;

      case 2:

         return 'EM ANDAMENTO';

         break;

      default:

         return 'DESATUALIZADO';

         break;

   }

}



e na sua gridView coloque




'columns'=>array(

   array(

      'name'=>'status',

      'value'=>'$data->getDescricaoStatus()',

   ),

),



Valeu mesmo meu amigo, muito obrigado…:D

Sds,