Erro Somente Na Alteração

Peguei uma nova tarefa, que era adicionar alguns campos numa página.

Este campo só recebe dois valores (Sim e Não) então utilizei um tipo Enum no MySql e no Yii coloquei pra trazer estes dois valores para serem selecionados.

Eu fiz eu deu certinho, mas depois me falaram que um dos campos novos deveria ser utilizado no filtro.

Daí descobri que pra isso funcionar precisava que os valores do campo precisariam estar numa tabela e esta deveria estar relacionada a uma classe, fiz isso.

Então agora esta página esta funcionando certinho pra adição e pro filtro também mas na edição da erro, da uma mensagem dizendo que não existe uma referência para o campo, quando entra na listagem.

O valor para a coluna "Cod_Reativo" não foi fornecido ao consultar a tabela "contato_visita".

O campo que criei é o cod_reativo, foi criado na tabela contato_visita

criei a tabela tipo_reativo com os campos cod_reativo e Descricao

criei uma FK relacionando o contato_visita.cod_reativo com tipo_reativo.cod_reativo

Aqui estão os trechos modificados

no Model

Rules


            array('Empresa_Fantasia, Data_Visita, Cod_Vendedor, Cod_Status_Contato_Visita, Cod_Reativo', 'safe', 'on'=>'search'),


            array('Cod_Reativo, QualidadeReativo', 'required', 'on'=>'update'),

Relations


'tiporeativo'=>array(self::BELONGS_TO, 'tiporeativo', 'Cod_Reativo')

attributeLabels


'Cod_Reativo' => 'Se é reativo',

search


$criteria->compare('Cod_Reativo',$this->Cod_Reativo,true);

searchCSV


Adicionei em $columns 

tipo_reativo.Descricao as Reativo


e 

->leftJoin('tipo_reativo', 'contato_visita.Cod_Reativo = tipo_reativo.Cod_Reativo')


mais abaixo

        if (isset($this->Cod_Reativo)) {

            $command->andWhere('tipo_reativo.Cod_Reativo = :Cod_Reativo', array(':Cod_Reativo' => $this->Cod_Reativo));

        }



criei a classe "models\tiporeativo.php"

acho que não preciso colocar aqui, porque ela esta identica a uma outra que funciona, claro alterando o nome da tabela e campos

Em views\contatovisita\_form.php


            <?php echo $form->dropDownListRow($model, 'Cod_Reativo',

                CHtml::listData(tiporeativo::model()->findAll(), 'Cod_Reativo', 'Descricao'),

                array('prompt' => 'Indique se é Reativo')); ?>

Em Em views\contatovisita\index.php


        array(

            'header'=>$model->getAttributeLabel('Cod_Reativo'),            

            'name'=>'Cod_Reativo',

            'value'=>'(isset($data->tiporeativo->Cod_Reativo)) ? CHtml::encode($data->tiporeativo->Descricao) : NULL',            

            'type'=>'raw',           

            'filter'=> CHtml::listData(tiporeativo::model()->findAll(),'Cod_Reativo','Descricao'),                        

        )                        



Já chequei a ‘comentar’ (retirar do código) todos os pontos de alteração que fiz e não muda o erro.

Então concluo que não é algo que eu fiz, mas algo que eu deixei de fazer.

Mas … esse campo ele é bastante similar a um outro que é utilizado também como valores indexados pra um outro campo na mesma tabela.

E todos os fontes que tem referências a este campo também coloquei os trechos de código relacionados a esse novo campo.

Então apelo aos nobres colegas…

E também já peço uma dica, se há um meio de utilizar um campo no filtro sem ter que precisar de uma outra tabela e outra classe.

Num dos testes que fiz, alterei o nome do campo e o erro passou a indicar o nome alterado.

Então concluí que o Yii pega a relação de campos automáticamente, mas … precisa de que em algum ponto haja uma referência a ela…

Nem sei como mas ficou tudo funcionando…

Mas como tenho que replicar as alterações em produção resolvi baixar tudo e implantar as alterações localmente pra ver se dava tudo certinho… e não deu…

No caso um campo novo não esta gravando SOMENTE na adição.

Na edição ele salva normalzim.

Falei com quem me pediu a alteração e ele me falou que este campo nunca seria salvo na adição mesmo, só na edição.

Então agora quero ver se tem como desabilitar um campo somente na adição ou mesmo faze-lo ficar invisível na adição mas na edição mostrar.