Xevious
(Xeviousbr)
September 26, 2014, 8:50pm
1
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
Xevious
(Xeviousbr)
September 29, 2014, 2:09pm
2
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]
Xevious
(Xeviousbr)
September 29, 2014, 2:28pm
3
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();
}
Xevious
(Xeviousbr)
September 29, 2014, 6:14pm
4
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();