Lançado Adianti Framework 7.6!
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