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…