View com relacionamento de muitos para muitos

Olá pessoal.

Estou iniciando um trabalho com Yii. Gostaria de saber se alguém já tratou relacionamentos muitos para muitos. Sei que o yiic cria os respectivos relacionamentos mas não sei como o Yii trata isso na geração do Crud. Já trabalhei com CakePHP e o gerador dele (bake) cria as páginas direitinho.

Tenho como exemplo duas tabelas Aluno e Categoria e, evidentemente como é many_to_many, uma terceira Aluno_has_categoria como segue:

CREATE TABLE Aluno (

  idAluno SERIAL,

  idCidade INTEGER  NOT NULL  ,

  nome VARCHAR(100)  NULL    ,

PRIMARY KEY(idAluno),

  FOREIGN KEY(idCidade)

    REFERENCES Cidade(idCidade)

      ON DELETE RESTRICT

      ON UPDATE CASCADE);

CREATE TABLE Categoria (

  id SERIAL,

  nome VARCHAR(100)  NULL    ,

PRIMARY KEY(id));

CREATE TABLE Aluno_has_Categoria (

  idAluno INTEGER  NOT NULL  ,

  id INTEGER  NOT NULL    ,

PRIMARY KEY(idAluno, id),

  FOREIGN KEY(idAluno)

    REFERENCES Aluno(idAluno)

      ON DELETE RESTRICT

      ON UPDATE CASCADE,

  FOREIGN KEY(id)

    REFERENCES Categoria(id)

      ON DELETE RESTRICT

      ON UPDATE CASCADE);

Se alguém tiver alguma dica de como lidar com isso na View, fico grato.

Cara, tá cheio de tutorial, guides no site do yii explicando isso. Tem até demos.

Valeu,  já ajudou. Na próxima vou olhar melhor.

Só olhar no guide do blog, lá tem descrito o que vc quer, que é a relacao MANY_MANY

Tava olhando issoa agora la no guia do blog

mas está estranha a modelagem

redundante, pra que armazenar as tags na tabela post e tbm na tabela tag?

pode ser questao de performance, mas continua sendo redundante.

alguem tem ideia de como passar os valores pra q eu possa adicionar em outra tabela num evento afterSave() ?

Acho que está entendendo errado.

Em Post há apenas a referencia a tags (para obter todas as tags de um Post).

Quanto a segunda parte, se vc for ter de usar valores "de fora do Model", melhor efetuar sua operação pelo controller mesmo. Assim:



$db = Yii:app()->db();


$db->beginTransaction();





A->codigo = 1;


A->nome = 'teste';


A->save();





B->codPai = A->codigo;


B->data = date('d/m/Y');


B->save();





$db->commitTransaction();


*ps: codigo nao testado, foi só pra ilustrar mesmo :P

eu terminei fazendo no controller mesmo

mas quanto ao tutorial do blog me parece que ele tambem persiste na tabela post.

já que pra inserir na tabela de tags ele usa um foreach q pega todas as tags do campo tag.

dando erro aqui meu codigo tah assim

			$transaction=$modelTear->dbConnection->beginTransaction();


				


			$modelTear->attributes=$_POST['Tear'];


			if($modelTear->save()){


				$modelGrupoTear = new Grupo_Tear();


				$modelGrupoTear->attributes = $_POST['Grupo_Tear'];


				$modelGrupoTear->tear = $modelTear->tearId;





				if($modelGrupoTear->save()){


					$transaction->commit();


					$this->redirect(array('show','id'=>$modelTear->tearId));


				}else{


					$transaction->rollBack();


					var_dump($modelGrupoTear->getErrors());


					exit;


				}


			}

se desse erro era pra ele mostrar nesse var_dump, mas ele exibe

array(0) { }

ou seja nao tem nenhum erro, mas ele nao salva. se eu cancelar a validacao ele insere, mas nao retorna qual é o erro que ta dando na validacao.

desculpa aew galera pelo "flood"

mas soh pra avisar que eu descobri o que era

na funcao beforeValidate() tenho que retornar true pra que ele conclua a validacao, quando eu olhei a implementacao do validate eu percebi isso.

Tu não é o primeiro a cair nesse mesmo problema do return true;