Yii Framework Forum: Problema na Inserção - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Problema na Inserção Dados inseridos, então sendo substituido pelo próximo registro Rate Topic: -----

#1 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 805
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 17 September 2010 - 01:39 PM

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'
        ));
    }

Newerton Vargas de Araújo
0

#2 User is offline   Daniel Augusto Bastos 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 347
  • Joined: 25-May 09
  • Location:Rio de Janeiro - Brasil

Posted 20 September 2010 - 11:15 AM

WTF???

Aparentemente não tem nada de errado apesar de jurar que não entendi o seu foreach.

$i = 0;
foreach ($_POST["Telefone"] as $i => $item) {
  $attributes[] = $i;
  $i++;
}
 

Mas, como o problema é o paciênte, vamos deixar pra lá .. 
Tenta setar null explicitamente para o ID e deixar ele como safe no model. Tb habilita o profile no config e pegar os SQLs que ele ta fazendo pelo Log do Yii. Talvez dê uma luz.

    'log'=>array(
      'class'=>'CLogRouter',
      'routes'=>array(
        array(
          'class'=>'CFileLogRoute',
          'levels'=>'profile',
        ),
      ),
    ),


Não sei se eixiste algum problema no FW com campos auto-inc, pq eu uso UUID gerado por um behavior, mas vale uma pesquisa.

Como essa action ai só funciona pra criar, vc pode forçar eel a criar usando $model->isNewRecord = true antes do save que deve funcionar. 

Quando ao cache (Ví vc falando lá na lista de PHP do Google),  ele realmente não tem nada haver. É só pra metadados mesmo .. 
Every solution creates a problem.
twitter.com/nenhumnick
0

#3 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 805
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 21 September 2010 - 12:09 PM

Daniel,

Sobre o 'foreach', era de uma listagem de telefones, pensei que ia haver muitos atributos, para não ter que ficar declarando um por um, fiz isso.

Antes de postar aqui, desativei o schemaCaching, até o momento não tive reclamação.
Edit:desativei o 'cache'=>array('class'=>'system.caching.CFileCache') TAMBÉM.

Coloquei o 'codpaciente', como safe no Model, e inseri o CFileLogRoute(profile), vamos ver no decorrer do uso.

Valeu pela atenção.

View PostDaniel A. Bastos, on 20 September 2010 - 11:15 AM, said:

WTF???

Aparentemente não tem nada de errado apesar de jurar que não entendi o seu foreach.

$i = 0;
foreach ($_POST["Telefone"] as $i => $item) {
  $attributes[] = $i;
  $i++;
}
 

Mas, como o problema é o paciênte, vamos deixar pra lá .. 
Tenta setar null explicitamente para o ID e deixar ele como safe no model. Tb habilita o profile no config e pegar os SQLs que ele ta fazendo pelo Log do Yii. Talvez dê uma luz.

    'log'=>array(
      'class'=>'CLogRouter',
      'routes'=>array(
        array(
          'class'=>'CFileLogRoute',
          'levels'=>'profile',
        ),
      ),
    ),


Não sei se eixiste algum problema no FW com campos auto-inc, pq eu uso UUID gerado por um behavior, mas vale uma pesquisa.

Como essa action ai só funciona pra criar, vc pode forçar eel a criar usando $model->isNewRecord = true antes do save que deve funcionar. 

Quando ao cache (Ví vc falando lá na lista de PHP do Google),  ele realmente não tem nada haver. É só pra metadados mesmo .. 

This post has been edited by Newerton: 21 September 2010 - 12:19 PM

Newerton Vargas de Araújo
0

#4 User is offline   Daniel Augusto Bastos 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 347
  • Joined: 25-May 09
  • Location:Rio de Janeiro - Brasil

Posted 21 September 2010 - 01:20 PM

Curiosidade, qual versão do Yii vc ta usando?
Every solution creates a problem.
twitter.com/nenhumnick
0

#5 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 805
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 21 September 2010 - 02:12 PM

View PostDaniel A. Bastos, on 21 September 2010 - 01:20 PM, said:

Curiosidade, qual versão do Yii vc ta usando?


Se não me engano a versão 1.1.4, senao a 1.1.3,
Sempre mantenho atualizado novos projetos que desenvolvo.
Newerton Vargas de Araújo
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users