[Resolvido] Gravar Numa Outra Tabela Ao Gravar Numa

Quando o usuário setar um valor certo valor num campo.

Tenho que gravar outro valor numa outra tabela.

Creio que o tratamento seja no Controller em actionUpdate

Coloquei este IF




if ($model->StatusConta != 'Em Andamento') {

   // TODO Fazer update nas Oportunidades


   // Duas alternativas

   // 1) Update em todos registros de uma só vez

   // 2) Fazer update em loop, selecionando as oportunidades da conta primeiro

}



Então tenho que realizar um update em todos registros em que a Oportunidade é daquela Conta

e esta operação é realizada na edição da Conta

Consegui ir adiante na tarefa, mas na hora de gravar ta dando erro

Este é o código que coloquei no evento … do Controller


                if ($model->StatusConta != 'Em Andamento') {


                    $oportunidades = Oportunidade::model()->findAll('Cod_Conta ='.$model->Cod_Cadastro.' and Status in (7, 8, 9, 12)');

                    if ($model->StatusConta == 'Perdido') {

                        $oportunidades->Status = 11;

                    } else {

                        $oportunidades->Status = 10;

                    }

                    $oportunidades->save();

                }



E bem onde estou setando o valor no campo da esse erro

[color="#FF0000"]Attempt to assign property of non-object[/color]

No caso nesta linha [color="#0000FF"]$oportunidades->Status = 11;[/color]

Ele entrou no IF na condição True, ou seja eu alterei o campo Status na tela para o valor ‘Perdido’ e ele aceitou o campo.

Mas na hora de setar a variável da outra tabela, deu esse erro

[color="#2E8B57"]Qual seria o jeito certo de fazer esta gravação ?[/color]

Minha conclusão é que o critério de pesquisa deu errado

por isso que falou que não podia setar o objeto

tentei outra implementação, mas deu na mesma


if ($model->StatusConta != 'Em Andamento') {


    $criteria = new CDbCriteria();

    $criteria->select = 'Status';

    $criteria->condition = "Cod_Conta = :conta";

    $criteria->params = array(":conta" => $model->Cod_Cadastro);

    $criteria->condition=$criteria->condition.' and Status in (7, 8, 9, 12)';


    $oportunidades = Oportunidade::model()->findAll($criteria);


    if ($model->StatusConta == 'Perdido') {

        $oportunidades->Status = 11;

    } else {

        $oportunidades->Status = 10;

    }

    $oportunidades->save();

}

Resolvi, utilizando SQL direto.

Sei que não é o mais ‘aconselhável’ com esse tipo de tecnologia

então se alguém tiver um código alternativo, diz aê


                    $valor = 0;

                    if ($model->StatusConta == 'Perdido') {

                        $valor = 11;

                    } else {

                        $valor = 10;

                    }

                    $sql_update = "UPDATE Oportunidade SET Status = ".$valor." WHERE Cod_Conta = ".$model->Cod_Cadastro." and Status in (7, 8, 9, 12)";

                    $cmd_update = Yii::app()->db->createCommand($sql_update);

                    $cmd_update->execute();