Olá a todos,
Bom esse erro, ocorreu depois o cliente salientar que alguns registro estão sendo atualizando pelo próximo registro inserido.
Exemplo:
João foi cadastrado na instituição CAMS I, e gero o ID 100
Foi salvo!
Maria foi cadastrada na instituição CAMS II, e pega o mesmo ID 100.
O cliente saliento, que esse tipo, ocorre quando eles muda a instituição(origem).
O banco de dados tem auto-incremento na coluna ID, e não tem usar o mesmo registro.
E no controller Paciente, o save() está normal, por que se eu colocar save(false), ele vai substituir sempre o ultimo ID.
Alguem tem uma solução?
Vou postar parte o actionCreate() do PacienteController.
public function actionCreate() {
$model = new Paciente;
$telefone = new Telefone;
// Uncomment the following line if AJAX validation is needed
$this->performAjaxValidation($model);
if (isset($_POST['Paciente'])) {
$_POST['Paciente']['datacriacao'] = date('Y-m-d H:i:s');
$_POST['Paciente']['datanascimento'] = formatarData($_POST['Paciente']['datanascimento'], '/');
$_POST['Paciente']['dataavaliacao'] = formatarData($_POST['Paciente']['dataavaliacao'], '/');
array_walk($_POST['Paciente'], 'uppercase');
$model->attributes = $_POST['Paciente'];
if ($model->save()) {
if (isset($_POST['Telefone'])) {
$quant = count($_POST["Telefone"]["titulo"]);
$i = 0;
foreach ($_POST["Telefone"] as $i => $item) {
$attributes[] = $i;
$i++;
}
for ($i = 0; $i < $quant; $i++) {
if ($_POST["Telefone"]["titulo"]["$i"] <> '') {
$telefone = new Telefone;
$codtelefone = db()->createCommand("SELECT MAX(codtelefone) FROM telefone")->queryScalar() + 1;
for ($j = 0; $j < count($attributes); $j++) {
$attrib = $attributes[$j];
$telefone->$attrib = strtoupper($_POST["Telefone"]["$attrib"]["$i"]);
}
$telefone->codtelefone = $codtelefone;
$telefone->datacriacao = date('Y-m-d H:i:s');
$telefone->cod = $model->codpaciente;
$telefone->bd = controller();
$telefone->save(false);
}
}
}
if ($_POST["botao"] == "adicionar")
$this->redirect(array('index', 'alerta' => 'ok'));
else if ($_POST["botao"] == "adicionaroutro")
$this->redirect(array('create', 'alerta' => 'ok'));
else if ($_POST["botao"] == "adicionareditar")
$this->redirect(array('update', 'id' => $model->codpaciente, 'alerta' => 'ok'));
}
}
$this->render('create', array(
'model' => $model,
'telefone' => $telefone,
'alerta' => 'ok'
));
}