CGridVIew para exibir dados de tabela relacionada

Boa tarde, povo.

To com um problema aqui me incomodando desde de manhã:

Primeiro, as tabelas que estou usando (o banco de dados é esse e eu não posso modificar):

Tabela "Dados":

  • ID_Dado (PK)

  • Colunas diversas

Tabela "Agenda":

  • ID_Agenda (PK)

  • Colunas diversas

Tabela "Revisao":

  • ID_Revisao (PK)

  • Colunas diversas

Tabela "Versao": não possui primary key

  • ID_Dado

  • ID_Agenda

  • ID_Revisao

O que preciso fazer:

Dentro do form de edição da tabela Dados, preciso exibir um grid com os dados da tabela Agendas que são relacionados com o registro atual.

Eu tentei várias coisas aqui, mas não consegui nada que funcionasse. Não consegui criar relacionamentos na tabela "Versao" porque ela não tem PrimaryKey. O Yii procurava o valor da PK automaticamente e, não achando PK, acabava dando erro.

Alguém tem alguma ideia de como eu poderia implementar isso?

E porque não tem PK?

Se é uma tabela para fazer o relacionamento NxN, faça os 3 campos como chave composta.

Não avaliei se isso é a solução do seu problema, mas a chave composta é o desenho padrão de uma tabela de relacionamento.

ei pessoal aguem tem o manual para downlaod em portugues

O banco de dados é projetado e criado pelo cliente, eu estou apenas produzindo o código como um terceiro. O banco é esse e tenho que aceitar.

De qualquer forma, consegui resolver o problema: Ao invés de usar o modelo, fiz um select no banco, carreguei os dados para um array e usei um CArrayDataProvider.

Ola,

Você pode fazer uma relação no model(Dados) tipo:




'REL_Agenda'=>array(self::MANY_MANY, 'Agenda',

                'Versao(ID_Dado, ID_Agenda,ID_Revisao)'),



Lembrando onde tem ‘[color="#FF0000"]Versao[/color](ID_Dado, ID_Agenda,ID_Revisao)’). é o nome da sua tabela e não o nome do model Versao.

se não funcionar você deve adicionar o PK na tabela versao.

no _form pode fazer o teste:




$agendas = $model->REL_Agenda;


foreach($agendas as $agenda) {

	echo 'codigo_agenda:'.$agenda->id.'<br/>';

	echo 'Nome_Agenda:'.$agenda->Nome.'<br/>';

	echo '<hr />';

	

}



sei que o post é antigo , mas pode ser útil para outras pessoas.

Abraço,

Darlecio Almeida