Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Dificuldade em gravar array Ola, as todos Estou tentando gravar dados de um array, no base de dados, alguém pode me ajudar ? ...
RB
Dificuldade em gravar array  
Ola, as todos

Estou tentando gravar dados de um array, no base de dados, alguém pode me ajudar ?

  1. <?php
  2. public function buscaCnpjWeb($cnpj)
  3.   {
  4.     try
  5.     {
  6.       if (isset($cnpj) and (!empty($cnpj)))
  7.       {
  8.           $retorno  json_decode(@file_get_contents('https://www.receitaws.com.br/v1/cnpj/'.urlencode(str_replace(['.','-','/',' '],['','','',''],$cnpj))));
  9.           $objeto = new Juridica;
  10.           $objeto->atividade_primaria =  $retorno->atividade_principal;
  11.           $objeto->store();
  12.           return $objeto;
  13.         }
  14.         
  15.       }
  16.     }
  17.     catch (Exception $e)
  18.     {
  19.       new TMessage('error'$e->getMessage());
  20.     }
  21.   }
  22. ?>

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 (11)


MC

Tem alguma mensagem de erro? tente assim
  1. <?php
  2. try
  3.     {
  4.       
  5.       TTransaction::open('permission');  //tente abrir a conexão      
  6.       if (isset($cnpj) and (!empty($cnpj)))
  7.       {
  8.           $retorno  json_decode(@file_get_contents('https://www.receitaws.com.br/v1/cnpj/'.urlencode(str_replace(['.','-','/',' '],['','','',''],$cnpj)))); //seria interessante vc fazer o str_replace depois em outra variavel, e não direto com a função json_decode
  9.           var_dump($retorno); //para saber o tipo, se é um array, ou um json, ou apenas um valor
  10.           //cuidado com a @(ela tira os erros e força o resultado)
  11.           //Se a variável $retorno for um array, tem que fazer um foreach
  12.           $objeto = new Juridica//se não for array, pode          
  13.           $objeto->atividade_primaria =  $retorno->atividade_principal;
  14.           $objeto->store();
  15.           return $objeto;
  16.         }
  17.         
  18.       }
  19.       //fecha a conexão
  20.       TTransaction::close(); 
  21.     }
  22.     catch (Exception $e)
  23.     {
  24.       new TMessage('error'$e->getMessage());
  25.     }
  26. ?>

Certifique que na model, exista o campo atividade_primária,
RB

Miuller,

esta questão de abrir transação com o banco de dados, eu fiz, coloquei apenas o trecho que não estou conseguindo gravar
  1. <?php
  2. outros .....
  3. foreach ($objeto->atividade_principal as $obj
  4.             {
  5.                 $juridica->atividade_primaria $objeto->text;
  6.                 $juridica->store(); 
  7.             } 
  8. ?>

print do resultado https://ibb.co/cf5aiA
LG

Bom dia Rubens, o correto num seria assim?

  1. <?php
  2. outros .....
  3. foreach ($objeto->atividade_principal as $obj
  4.             {
  5.                 $juridica->atividade_primaria $obj->text;
  6.                 $juridica->store(); 
  7.             } 
  8. ?>
RB

Leandro,

Bom dia, valeu pela observação,

Eu corrigi, porém sem sucesso.

  1. <?php
  2. //ja tentei assim
  3. //outros .....
  4. foreach ($objeto->atividade_principal as $obj_pri 
  5.       {
  6.         $juridica->atividade_primaria .= $obj_pri->code " - ";
  7.         $juridica->atividade_primaria .= $obj_pri->text "\n";
  8.       }
  9. // Assim
  10. for ($i 0$i count($objeto->atividade_principal); $i++) {
  11.         $juridica->atividade_primaria .= $objeto->atividade_principal[$i]->code " - ";
  12.         $juridica->atividade_primaria .= $objeto->atividade_principal[$i]->text "\n";
  13.       }
  14. ?>


Dos dois jeito quando do um print retorna com sucesso, porém quando vejo no banco não gravou.

<a href="https://ibb.co/bNiA0q"><img src="https://thumb.ibb.co/bNiA0q/Captura-de-tela-de-2018-10-26-09-09-56.png" alt="Captura-de-tela-de-2018-10-26-09-09-56" border="0"></a>
LG

Bom dia se no print do objeto está tudo preenchido, precisa verfificar se há algum problema na Model ou no banco de dados, já verificou o tipo de dados do campo que apresenta problemas se realmente condiz com o conteudo a ser salvo nele?
RB

Impressionante,

Verifiquei os logs de sql e mostra que fez o insert .

https://ibb.co/gStV0q
MC

Ficaria mais fácil vc postar o código inteiro, pois em alguns trechos do código vc tem $param['cnpj'] e em outros $data->cnpj.


  1. <?php
  2. if (isset(//.......
  3.             {
  4.                //aconselho vc a usar o urlencode depois na variavel $retorno
  5.                $retorno  json_decode(@file_get_contents('https://www.receitaws.com.br/v1/cnpj/'.urlencode(str_replace(['.','-','/',' '],['','','',''],$cnpj)))); //seria interessante vc fazer o str_replace depois em outra variavel, e não direto com a função json_decode
  6.                //Se a variável $retorno for um array, tem que fazer um foreach
  7.                foreach ($retorno as $ret
  8.                {
  9.                      $atividade_principal $ret->atividade_principal;///nome  indice do array
  10.                }         
  11.                $objeto->atividade_primaria =  $atividade_principal
  12.                $objeto->store();
  13.                return $objeto;
  14.            
  15.             }
  16. ?>
RB

Miuller, segue

  1. <?php
  2. /**
  3.  * Juridica Active Record
  4.  * @author  <your-name-here>
  5.  */
  6. class Juridica extends TRecord
  7. {
  8.   const TABLENAME 'juridica';
  9.   const PRIMARYKEY 'id';
  10.   const IDPOLICY 'serial'// {max, serial}
  11.   use SystemChangeLogTrait;
  12.   private $pessoa;
  13.   private $modelo_fiscal;
  14.   private $natureza_juridica;
  15.   private $categoria_juridica;
  16.   /**
  17.    * Constructor method
  18.    */
  19.   public function __construct($id null$callObjectLoad true)
  20.   {
  21.     parent::__construct($id$callObjectLoad);
  22.     parent::addAttribute('nome');
  23.     parent::addAttribute('nome_fantasia');
  24.     parent::addAttribute('razao_social');
  25.     parent::addAttribute('cnpj');
  26.     parent::addAttribute('pessoa_id');
  27.     parent::addAttribute('inscricao_estadual');
  28.     parent::addAttribute('inscricao_municipal');
  29.     parent::addAttribute('inscricao_junta_comercial');
  30.     parent::addAttribute('modelo_fiscal_id');
  31.     parent::addAttribute('categoria_juridica_id');
  32.     parent::addAttribute('natureza_juridica_id');
  33.     parent::addAttribute('socio');
  34.     parent::addAttribute('faturamento');
  35.     parent::addAttribute('situacao');
  36.     parent::addAttribute('tipo');
  37.     parent::addAttribute('capital_social');
  38.     parent::addAttribute('data_inicio');
  39.     parent::addAttribute('atividade_primaria');
  40.     parent::addAttribute('atividade_secundaria');
  41.     parent::addAttribute('atualizacao_receita');
  42.     parent::addAttribute('complemento');
  43.     parent::addAttribute('motivo_situacao');
  44.     parent::addAttribute('situacao_especial');
  45.     parent::addAttribute('data_situacao_especial');
  46.   }
  47. ?>


  1. <?php
  2. public static function addCnpj($cnpj)
  3.   {
  4.           $cnpj preg_replace('/[^0-9]/','',$objeto->cnpj);
  5.           $objeto json_decode(@file_get_contents('https://www.receitaws.com.br/v1/cnpj/' urlencode($cnpj)));
  6.     //print_r($objeto);
  7.     try {
  8.       TTransaction::open('teste');
  9.       TTransaction::setLoggerFunction(function ($message) {
  10.         echo $message '<br>';
  11.       });
  12.         $pessoa = new Pessoa;
  13.         $pessoa->criacao date('Y-m-d H:m:s');
  14.         $pessoa->atualizacao date('Y-m-d H:m:s');
  15.         $pessoa->store();
  16.         //... outros
  17.       
  18.         $juridica = new Juridica;
  19.         $juridica->pessoa_id $pessoa->id;
  20.         $cnpj preg_replace('/[^0-9]/','',$objeto->cnpj);
  21.         $juridica->cnpj $cnpj;
  22.         $juridica->nome $objeto->nome;
  23.         $juridica->razao_social $objeto->nome;
  24.         $juridica->modelo_fiscal_id 1;
  25.       //$juridica->inscricao_estadual         = str_replace(['.','/','-'],['','',''],$objeto->inscricao_estadual);
  26.      //$juridica->inscricao_municipal        = str_replace(['.','/','-'],['','',''],$objeto->inscricao_municipal);
  27.      //$juridica->inscricao_junta_comercial  = str_replace(['.','/','-'],['','',''],$objeto->inscricao_junta_comercial);
  28.         if (empty($objeto->fantasia)) :
  29.           $juridica->nome_fantasia 'Não informado';
  30.         else :
  31.           $juridica->nome_fantasia $objeto->fantasia;
  32.         endif;
  33.         if ($objeto->situacao == 'ATIVA') :
  34.           $juridica->situacao 1;
  35.         else :
  36.           $juridica->situacao 2;
  37.         endif;
  38.         if ($objeto->tipo == 'Matriz') :
  39.           $juridica->tipo 1;
  40.         else :
  41.           $juridica->tipo 2;
  42.         endif;
  43.         foreach ($objeto->atividade_principal as $obj_pri) {
  44.           if ($obj_pri) {
  45.             $juridica->atividade_primaria .= $obj_pri->code " - ";
  46.             $juridica->atividade_primaria .= $obj_pri->text "\n";
  47.           }
  48.         }
  49.         foreach ($objeto->atividades_secundarias as $obj_sec) {
  50.           if ($obj_sec) {
  51.             $juridica->atividade_secundaria .= $obj_sec->code " - ";
  52.             $juridica->atividade_secundaria .= $obj_sec->text "\n";
  53.           }
  54.         }
  55.         foreach ($objeto->qsa as $obj_qsa) {
  56.           if ($obj_qsa) {
  57.             $juridica->socio .= $obj_qsa->qual " - ";
  58.             $juridica->socio .= $obj_qsa->nome "\n";
  59.           }
  60.         }
  61.         $juridica->motivo_situacao $objeto->motivo_situacao;
  62.         $juridica->situacao_especial $objeto->situacao_especial;
  63.         $juridica->data_situacao_especial $objeto->data_situacao_especial;
  64.         $juridica->capital_social $objeto->capital_social;
  65.         $juridica->data_inicio TDate::date2us($objeto->abertura);
  66.         //$juridica->faturamento              = $objeto->faturamento;
  67.         $juridica->complemento $objeto->complemento;
  68.         $juridica->atualizacao_receita $objeto->ultima_atualizacao;
  69.         $juridica->criacao date('Y-m-d H:i:s');
  70.         $juridica->atualizacao date('Y-m-d H:i:s');
  71.         $juridica->store();
  72.         
  73.         return $juridica;
  74.         
  75.       
  76.       TTransaction::close();
  77.     } catch (Exception $e) {
  78.       new TMessage('error'$e->getMessage());
  79.       //TTransaction::rollback();
  80.     }
  81.   }
  82. ?>



LG

Bom dia possi estar enganado, mas esse return $juridica antes de fechar a transacao impede de persistir os dados no banco, faça um teste coloque apos fechar a transação
MC

Caro Rubens, pelo que vi no seu código vc está tentando retornar um array completo, pode ser que na hora de salvar vc está colocando um array inteiro dentro de um campo, cuidado com esse return, ele pode te causar problemas.

tente fazer isso dentro do evento onSave, ou dentro de um

  1. <?php
  2.                    //atividade_principal é o array(olhar linha var_dump( $objeto ))então para vc acessar algum item em específico do array, dê uma olhada
  3.                    //nesse exemplo que fiz, 
  4.                    
  5.                     $cnpj preg_replace('/[^0-9]/','','45.997.418/0001-53.');
  6.                     $objeto json_decode(@file_get_contents('https://www.receitaws.com.br/v1/cnpj/' urlencode($cnpj)));
  7.                     echo "A situação é :     ".$objeto->{'situacao'}.'<br>';//para vc acessar uma propriedade pode fazer assim
  8.                     echo "A data situação é :".$objeto->{'data_situacao'}.'<br>';
  9.                     echo "O complemento é :  ".$objeto->{'complemento'}.'<br>';
  10.                     echo "A uf é :           ".$objeto->{'uf'}.'<br>';                  
  11.                     echo "abaixo vamos varrer um array<br>=============================================<br>";      
  12.              
  13.                     //var_dump( $objeto );
  14.                     $arrayteste = [];//atribui esse array, caso vc queira guardar as informações de dentro do array nessa variável
  15.                     foreach ($objeto->{'atividades_secundarias'} as $value//quandovc quer acessar um array dentro de outro array, tem que fazer foreach
  16.                     {
  17.                         echo 'txt:     '.$value->{'text'}.'<br>';                        
  18.                         echo 'code:    '.$value->{'code'}.'<br><br>=============================================<br>';   
  19.                         $arrayteste[$value->code] = $value;  //array atribuido
  20.                                           
  21.                     
  22.                   
  23.                     echo "<pre>";
  24.                     var_dump($arrayteste); //imprimir o array que armazenei dentro do foreach
  25.                     //TSession::setValue('cnpj', $arrayteste);       //aconselho vc guardar o resultado em uma session e depois atribuir o valor dentro do onSave     
  26.                     echo "</pre>";                    
  27. ?>


Boa sorte
RB

Miuller,

Funcionou da forma como indicou, valeu pela força.

Obrigado.