Inscrições abertas para nosso Webinar anual Adianti Framework 2024!
Clique aqui para saber mais
Erro de inserção com MultField Olá pessoal, estou tentando salvar no banco dados do MultField, mas está dando o seguinte erro: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'titular_id' código de salvamento: ...
MO
Erro de inserção com MultField  
Olá pessoal, estou tentando salvar no banco dados do MultField, mas está dando o seguinte erro:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'titular_id'

código de salvamento:
  1. <?php 
  2. public function onSave($param)
  3.     {
  4.         try
  5.         {
  6.             TTransaction::open('permission'); // open a transaction
  7.             
  8.             /**
  9.             // Enable Debug logger for SQL operations inside the transaction
  10.             TTransaction::setLogger(new TLoggerSTD); // standard output
  11.             TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  12.             **/
  13.             
  14.             $this->form->validate();                // valida dados do form
  15.             
  16.             $object = new Titular;                  // cria os objetos em branco
  17.             $data $this->form->getData();         // pega dados do form como array
  18.             $object->fromArray( (array) $data);     // lê os objetos do array
  19.             
  20.             //Formato americano para salvar no banco
  21.             $renda_total str_replace('.','',$object->rendatotal);
  22.             $renda_total str_replace(',','.',$renda_total);
  23.             $object->rendatotal $renda_total;
  24.             $valor_beneficio str_replace('.','',$object->valorbeneficio);
  25.             $valor_beneficio str_replace(',','.',$valor_beneficio);
  26.             $object->valorbeneficio $valor_beneficio;
  27.             
  28.             //Formato americano para salvar no banco
  29.             $object->datemisrg TDate::date2us($object->datemisrg);
  30.             $object->datnasc TDate::date2us($object->datnasc);
  31.             
  32.             // salva os objetos
  33.             $object->store(); 
  34.             // get the generated id
  35.             $data->cod_titular $object->cod_titular;
  36. // delete details
  37.             $old_items_prog Programa::where('titular_id''='$object->cod_titular)->load();
  38.             $keep_items_prog = array();
  39.             $message '';
  40.             //var_dump($data);
  41.             if ($data->programas)
  42.             {
  43.                 
  44.                 foreach ($data->programas as $programa)
  45.                 {
  46.                     //$programa->titular_id = $object->cod_titular;
  47.                     //$message .= 'Cod.Programa: '.$programa->id_programa .'<br>'. 'Cod.Titular.: '.$programa->titular_id  .'<br>'.'Cod.Tip Prog: '.$programa->tpprograma_id.'<br>';
  48.                     if ( empty($programa->id_programa) ) // Se não tiver o código é novo registro
  49.                     {
  50.                         $detail_prog = new Programa;
  51.                     }
  52.                     else
  53.                     {
  54.                         $detail_prog Programa::find($programa->id_programa);
  55.                     }
  56.                     
  57.                     $detail_prog->titular_id $object->cod_titular;
  58.                     $detail_prog->tpprograma_id  $programa->tpprograma_id;
  59.                     print 'Cod.Titular: '.$detail_prog->titular_id;
  60.                     
  61.                     $detail_prog->store();
  62.                     
  63.                     $keep_items_prog[] = $detail_prog->id_programa;
  64.                                    
  65.                 }
  66.                 new TMessage('info'$message);
  67.             } 
  68.             if ($old_items_prog)
  69.             {
  70.                 foreach ($old_items_prog as $old_item_prog)
  71.                 {
  72.                     if (!in_array$old_item_prog->id_programa$keep_items_prog))
  73.                     {
  74.                         $old_item_prog->delete();
  75.                     }
  76.                 }
  77.             }
  78.             
  79.             
  80. ?>




Modelo do Programa
  1. <?php 
  1. <?php
  2. /**
  3.  * Programa Active Record
  4.  * @author  <your-name-here>
  5.  */
  6. class Programa extends TRecord
  7. {
  8.     const TABLENAME 'programa';
  9.     const PRIMARYKEY'id_programa';
  10.     const IDPOLICY =  'serial'// {max, serial}
  11.     
  12.     
  13.     private $tpprograma;
  14.     /**
  15.      * Constructor method
  16.      */
  17.     public function __construct($id NULL$callObjectLoad TRUE)
  18.     {
  19.         parent::__construct($id$callObjectLoad);
  20.         parent::addAttribute('titular_id');
  21.         parent::addAttribute('tpprograma_id');
  22.     }
  23.     
  24.     /**
  25.      * Method set_tpprograma
  26.      * Sample of usage: $programa->tpprograma = $object;
  27.      * @param $object Instance of Tpprograma
  28.      */
  29.     public function set_tpprograma(Tpprograma $object)
  30.     {
  31.         $this->tpprograma $object;
  32.         $this->tpprograma_id $object->id;
  33.     }
  34.     
  35.     /**
  36.      * Method get_tpprograma
  37.      * Sample of usage: $programa->tpprograma->attribute;
  38.      * @returns Tpprograma instance
  39.      */
  40.     public function get_tpprograma()
  41.     {
  42.         // loads the associated object
  43.         if (empty($this->tpprograma))
  44.             $this->tpprograma = new Tpprograma($this->tpprograma_id);
  45.     
  46.         // returns the associated object
  47.         return $this->tpprograma;
  48.     }
  49.     /**
  50.      * Method get_nome_prog
  51.      * Sample of usage: $equipamento->tp_equipamento->attribute;
  52.      * @returns TpEquipamento instance
  53.      */
  54.      function get_nome_prog()
  55.      {
  56.          if (empty($this->programa)) 
  57.          $this->programa = new TpPrograma($this->tpprograma_id);
  58.          return $this->programa->nome_prog;
  59.      }
  60. }
  61. ?>



var_dump($data):

object(stdClass)[740]
public 'cod_titular' => string '1' (length=1)
public 'nome' => string 'Marcos Duarte' (length=13)
public 'apelido' => string 'Duarte' (length=6)
public 'sexo' => string '1' (length=1)
public 'escolaridade_id' => string '10' (length=2)
public 'cpf' => string '442.915.901-72' (length=14)
public 'nis' => string '1234567788' (length=10)
public 'celular1' => string '(85)11111-1111' (length=14)
public 'celular2' => string '(85)11111-1111' (length=14)
public 'telefone' => string '' (length=0)
public 'contato' => string 'Edna' (length=4)
public 'pai' => string 'Geraldo Duarte' (length=14)
public 'mae' => string 'Maria da Penha' (length=14)
public 'rg' => string '925688' (length=6)
public 'viarg' => string '1ª' (length=3)
public 'datemisrg' => string '06/01/0001' (length=10)
public 'orgexprg' => string 'SSP' (length=3)
public 'ufrg' => string '9' (length=1)
public 'datnasc' => string '08/12/0001' (length=10)
public 'naturalidade' => string 'Brasília' (length=9)
public 'logradouro_id' => string '102' (length=3)
public 'cep' => string '60125001' (length=8)
public 'endereco' => string 'José Vilar' (length=11)
public 'bairro_id' => string '12' (length=2)
public 'numero' => string '3397' (length=4)
public 'complemento' => string 'Baixos' (length=6)
public 'pontoref' => string 'Motel Shanadu' (length=13)
public 'tipo_nec_esp_id' => string '1' (length=1)
public 'qualnecespecial' => string 'NENHUM' (length=6)
public 'necadap' => string '2' (length=1)
public 'estado_civil_id' => string '2' (length=1)
public 'sitconjugal_id' => string '2' (length=1)
public 'qtdpesres' => string '5' (length=1)
public 'ocupacaoprof_id' => string '106' (length=3)
public 'tempo_trabalho_id' => string '5' (length=1)
public 'situacao_trab_id' => string '2' (length=1)
public 'localtrabalho' => string 'Prefeitura de Maracanau' (length=23)
public 'renda_mensal_id' => string '4' (length=1)
public 'renda_comp_id' => string '1' (length=1)
public 'beneficio_id' => string '1' (length=1)
public 'valorbeneficio' => string '100,30' (length=6)
public 'rendatotal' => string '2.350,50' (length=8)
public 'declaracao' => string '2' (length=1)
public 'situacaoderua' => string '2' (length=1)
public 'desistente' => string '2' (length=1)
public 'assocmorador' => string 'NENHUM' (length=6)
public 'participa' => string '2' (length=1)
public 'qtde_comodos_id' => string '1' (length=1)
public 'tempo_moradia_id' => string '1' (length=1)
public 'elim_dejetos_id' => string '1' (length=1)
public 'sit_fornec_id' => string '1' (length=1)
public 'numero_familias_habit_id' => string '1' (length=1)
public 'estado_habitacao_id' => string '1' (length=1)
public 'risco_localizacao_id' => string '1' (length=1)
public 'unidade_sanitaria_id' => string '1' (length=1)
public 'telefone_id' => string '1' (length=1)
public 'tempono_munic_id' => string '1' (length=1)
public 'energia_eletrica_id' => string '1' (length=1)
public 'uso_imovel_id' => string '1' (length=1)
public 'caracterisca_imov_id' => string '1' (length=1)
public 'transporte_id' => string '1' (length=1)
public 'ilum_publica_id' => string '1' (length=1)
public 'tipo_imovel_id' => string '1' (length=1)
public 'trat_dagua_id' => string '1' (length=1)
public 'destino_lixo_id' => string '1' (length=1)
public 'forma_ocupacao_id' => string '1' (length=1)
public 'local_banheiro_id' => string '1' (length=1)
public 'abast_dagua_id' => string '1' (length=1)
public 'id_equipamento' => string '' (length=0)
public 'nome_equip' => string '' (length=0)
public 'tp_equipamento_id' => string '' (length=0)
public 'id_programa' => string '' (length=0)
public 'nome_prog' => string '' (length=0)
public 'tpprograma_id' => string '' (length=0)
public 'id_projeto' => string '' (length=0)
public 'nome_proj' => string '' (length=0)
public 'tpprojeto_id' => string '' (length=0)
public 'observacao' => string '<p>teste</p>' (length=12)
public 'equipamentos' =>
array (size=8)
0 =>
object(stdClass)[754]
public 'id_equipamento' => string '91' (length=2)
public 'tp_equipamento_id' => string '1' (length=1)
public 'nome_equip' => string 'Creche Publica' (length=14)
1 =>
object(stdClass)[755]
public 'id_equipamento' => string '92' (length=2)
public 'tp_equipamento_id' => string '2' (length=1)
public 'nome_equip' => string 'Creche Comunitaria' (length=18)
2 =>
object(stdClass)[756]
public 'id_equipamento' => string '93' (length=2)
public 'tp_equipamento_id' => string '3' (length=1)
public 'nome_equip' => string 'Escola EF Publica' (length=17)
3 =>
object(stdClass)[757]
public 'id_equipamento' => string '94' (length=2)
public 'tp_equipamento_id' => string '4' (length=1)
public 'nome_equip' => string 'Escola EM Publica' (length=17)
4 =>
object(stdClass)[758]
public 'id_equipamento' => string '95' (length=2)
public 'tp_equipamento_id' => string '8' (length=1)
public 'nome_equip' => string 'Centro Comunitario' (length=18)
5 =>
object(stdClass)[759]
public 'id_equipamento' => string '96' (length=2)
public 'tp_equipamento_id' => string '9' (length=1)
public 'nome_equip' => string 'CRAS' (length=4)
6 =>
object(stdClass)[760]
public 'id_equipamento' => string '97' (length=2)
public 'tp_equipamento_id' => string '10' (length=2)
public 'nome_equip' => string 'Instituicao Religiosa' (length=21)
7 =>
object(stdClass)[761]
public 'id_equipamento' => string '100' (length=3)
public 'tp_equipamento_id' => string '7' (length=1)
public 'nome_equip' => string 'Hospital Publico' (length=16)
public 'programas' =>
array (size=2)
0 =>
object(stdClass)[751]
public 'id_programa' => string '1' (length=1)
public 'tpprograma_id' => string '1' (length=1)
public 'nome_prog' => string 'RESIDENCIAL BLANCHARD GIRÃO' (length=28)
1 =>
object(stdClass)[750]
public 'id_programa' => string '' (length=0)
public 'tpprograma_id' => string '2' (length=1)
public 'nome_prog' => string 'RESIDENCIAL VIRGÍLIO TÁVORA I' (length=31)
public 'projetos' =>
array (size=1)
0 =>
object(stdClass)[753]
public 'id_projeto' => string '1' (length=1)
public 'tpprojeto_id' => string '1' (length=1)
public 'nome_proj' => string 'MCMV' (length=4)


Agradeço desde já a ajuda

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (2)


LC

Este campo (titular_id) na sua tabela está como index unique ?
MO

Leandro Coelho, você tinha toda razão, nos campos de chave estrangeira estavam com titular_id unique no index, obrigado pela atenção