Yii Framework Forum: Listar registros relacionados - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Listar registros relacionados Rate Topic: -----

#1 User is offline   Fabio Jr. Policeno 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 133
  • Joined: 05-April 11

Posted 06 May 2011 - 08:25 AM

Bom dia pessoal, estou com dificuldades para listar registros relacionados, por exemplo, no cadastro de um projeto tem o usuario que cadastrou (tabela user), na listagem dos projetos está listando o código do usuário, gostaria de listar o nome do usuário e no filtro da coluna usuário, gostaria de deixar um textfield onde ele pesquisa o nome ou parte do nome do usuário, mesma coisa na busca avançada, estou tentando algumas maneiras, porém sem sucesso.

...$this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'project-category-grid',
	'dataProvider' => $model->search(),
	'filter' => $model,
	'columns' => array(
		array(
			'value'=>'CHtml::checkBox("id",null,array("value"=>$data->id,"id"=>"id".$data->id))',
			'type'=>'raw',
			'htmlOptions'=>array('width'=>5),
		),
		array(
			'name'=>'id',
			'htmlOptions'=>array('width'=>20),
		),
		array(
			'name'=> 'user.username',
		    'value' => User::model()->findByPk($model->user_id)->username
		),...

Assim até aparece o nome do usuário na listagem, mas o campo filtro some.

array(
			'name'=> 'user_id',
		    'value' => User::model()->findByPk($model->user_id)->username
		),

Assim o filtro aparece, mas na listagem exibe os id's dos usuário, além disso o filtro considera o id e não o nome do usuário, outra coisa, ao filtrar pelo user_id = 2 ele passa a exibir o nome dos usuários na lista.

Alguém tem alguma idéia?

Obrigado!
0

#2 User is offline   Fabio Jr. Policeno 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 133
  • Joined: 05-April 11

Posted 10 May 2011 - 12:07 PM

Ninguém por aqui fez uma listagem simples com 2 tabelas relacionadas?
0

#3 User is offline   Fabio Jr. Policeno 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 133
  • Joined: 05-April 11

Posted 10 May 2011 - 12:58 PM

Resolvido!
Model:

public function getUserFilter() {
	
        $Criteria = new CDbCriteria();
        $Criteria->select = "username";
        $results = User::model()->findAll($Criteria);
        $user_list = array();
        foreach ($results as $result) {
        	$user_list[$result->username] = $result->username;
        }
        
    	return $user_list;
	}


public function search()
	{
		...
		$criteria->with = array('user');
		
		...
		$criteria->compare('user.username', $this->user_id);
...


View (Listagem):
...
array(
        	'name' => 'user_id',
            'header' => 'User',
            'type' => 'raw',
            'value' => '$data->user->username',
            'filter' => $model->getUserFilter(),
			'htmlOptions'=>array('width'=>'10'),
		),
		array(
...

0

#4 User is offline   LucasSartori 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 03-July 13

Posted 04 July 2013 - 07:56 AM

Desculpem reviver o tópico, eu estava com o mesmo problema e a solução do amigo acima funcionou perfeitamente, porém ele mostra um erro quando mudo o filtro, falando que as ids estão duplicadas.

Este é o erro:
Integrity constraint violation: 1052 Column 'cat_id' in where clause is ambiguous



Eu estou aprendendo Yii então o que estou fazendo é somente teste, eu criei uma tabela produtos, e uma tabela produto_cat..
Na tabela produto eu tenho o cat_id que eu relaciono com o cat_id da tabela produto_cat, provavelmente o erro é pq coloquei o nome cat_id nas duas tabelas, isso realmente não pode acontecer?
0

#5 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 828
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 04 July 2013 - 08:19 PM

Lucas,

Normalmente o Yii adiciona alias aos nome das tabelas, para que não tenha conflitos com atributos repetidos.

Mais você pode definir sua alias para cada tabela, pode abrir qualquer Model, e adicionar a seguinte função:

public function defaultScope()
{
     return array(
          'alias' => 'prod',
     );
}


Veja pode você está buscando os dados, e adiciona prod.cat_id.
Newerton Vargas de Araújo
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users