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:
Modelo do Programa
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
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'titular_id'
código de salvamento:
- <?php
- public function onSave($param)
- {
- try
- {
- TTransaction::open('permission'); // open a transaction
- /**
- // Enable Debug logger for SQL operations inside the transaction
- TTransaction::setLogger(new TLoggerSTD); // standard output
- TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
- **/
- $this->form->validate(); // valida dados do form
- $object = new Titular; // cria os objetos em branco
- $data = $this->form->getData(); // pega dados do form como array
- $object->fromArray( (array) $data); // lê os objetos do array
- //Formato americano para salvar no banco
- $renda_total = str_replace('.','',$object->rendatotal);
- $renda_total = str_replace(',','.',$renda_total);
- $object->rendatotal = $renda_total;
- $valor_beneficio = str_replace('.','',$object->valorbeneficio);
- $valor_beneficio = str_replace(',','.',$valor_beneficio);
- $object->valorbeneficio = $valor_beneficio;
- //Formato americano para salvar no banco
- $object->datemisrg = TDate::date2us($object->datemisrg);
- $object->datnasc = TDate::date2us($object->datnasc);
- // salva os objetos
- $object->store();
- // get the generated id
- $data->cod_titular = $object->cod_titular;
- // delete details
- $old_items_prog = Programa::where('titular_id', '=', $object->cod_titular)->load();
- $keep_items_prog = array();
- $message = '';
- //var_dump($data);
- if ($data->programas)
- {
- foreach ($data->programas as $programa)
- {
- //$programa->titular_id = $object->cod_titular;
- //$message .= 'Cod.Programa: '.$programa->id_programa .'<br>'. 'Cod.Titular.: '.$programa->titular_id .'<br>'.'Cod.Tip Prog: '.$programa->tpprograma_id.'<br>';
- if ( empty($programa->id_programa) ) // Se não tiver o código é novo registro
- {
- $detail_prog = new Programa;
- }
- else
- {
- $detail_prog = Programa::find($programa->id_programa);
- }
- $detail_prog->titular_id = $object->cod_titular;
- $detail_prog->tpprograma_id = $programa->tpprograma_id;
- print 'Cod.Titular: '.$detail_prog->titular_id;
- $detail_prog->store();
- $keep_items_prog[] = $detail_prog->id_programa;
- }
- new TMessage('info', $message);
- }
- if ($old_items_prog)
- {
- foreach ($old_items_prog as $old_item_prog)
- {
- if (!in_array( $old_item_prog->id_programa, $keep_items_prog))
- {
- $old_item_prog->delete();
- }
- }
- }
- ?>
Modelo do Programa
- <?php
- <?php
- /**
- * Programa Active Record
- * @author <your-name-here>
- */
- class Programa extends TRecord
- {
- const TABLENAME = 'programa';
- const PRIMARYKEY= 'id_programa';
- const IDPOLICY = 'serial'; // {max, serial}
- private $tpprograma;
- /**
- * Constructor method
- */
- public function __construct($id = NULL, $callObjectLoad = TRUE)
- {
- parent::__construct($id, $callObjectLoad);
- parent::addAttribute('titular_id');
- parent::addAttribute('tpprograma_id');
- }
- /**
- * Method set_tpprograma
- * Sample of usage: $programa->tpprograma = $object;
- * @param $object Instance of Tpprograma
- */
- public function set_tpprograma(Tpprograma $object)
- {
- $this->tpprograma = $object;
- $this->tpprograma_id = $object->id;
- }
- /**
- * Method get_tpprograma
- * Sample of usage: $programa->tpprograma->attribute;
- * @returns Tpprograma instance
- */
- public function get_tpprograma()
- {
- // loads the associated object
- if (empty($this->tpprograma))
- $this->tpprograma = new Tpprograma($this->tpprograma_id);
- // returns the associated object
- return $this->tpprograma;
- }
- /**
- * Method get_nome_prog
- * Sample of usage: $equipamento->tp_equipamento->attribute;
- * @returns TpEquipamento instance
- */
- function get_nome_prog()
- {
- if (empty($this->programa))
- $this->programa = new TpPrograma($this->tpprograma_id);
- return $this->programa->nome_prog;
- }
- }
- ?>
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
Este campo (titular_id) na sua tabela está como index unique ?
Leandro Coelho, você tinha toda razão, nos campos de chave estrangeira estavam com titular_id unique no index, obrigado pela atenção