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. catch (Exception $e)
  17. {
  18. new TMessage('error', $e->getMessage());
  19. }
  20. }
  21. ?>

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (11)


MC

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

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. ?>
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. $juridica = new Juridica;
  18. $juridica->pessoa_id = $pessoa->id;
  19. $cnpj = preg_replace('/[^0-9]/','',$objeto->cnpj);
  20. $juridica->cnpj = $cnpj;
  21. $juridica->nome = $objeto->nome;
  22. $juridica->razao_social = $objeto->nome;
  23. $juridica->modelo_fiscal_id = 1;
  24. //$juridica->inscricao_estadual = str_replace(['.','/','-'],['','',''],$objeto->inscricao_estadual);
  25. //$juridica->inscricao_municipal = str_replace(['.','/','-'],['','',''],$objeto->inscricao_municipal);
  26. //$juridica->inscricao_junta_comercial = str_replace(['.','/','-'],['','',''],$objeto->inscricao_junta_comercial);
  27. if (empty($objeto->fantasia)) :
  28. $juridica->nome_fantasia = 'Não informado';
  29. else :
  30. $juridica->nome_fantasia = $objeto->fantasia;
  31. endif;
  32. if ($objeto->situacao == 'ATIVA') :
  33. $juridica->situacao = 1;
  34. else :
  35. $juridica->situacao = 2;
  36. endif;
  37. if ($objeto->tipo == 'Matriz') :
  38. $juridica->tipo = 1;
  39. else :
  40. $juridica->tipo = 2;
  41. endif;
  42. foreach ($objeto->atividade_principal as $obj_pri) {
  43. if ($obj_pri) {
  44. $juridica->atividade_primaria .= $obj_pri->code . " - ";
  45. $juridica->atividade_primaria .= $obj_pri->text . "\n";
  46. }
  47. }
  48. foreach ($objeto->atividades_secundarias as $obj_sec) {
  49. if ($obj_sec) {
  50. $juridica->atividade_secundaria .= $obj_sec->code . " - ";
  51. $juridica->atividade_secundaria .= $obj_sec->text . "\n";
  52. }
  53. }
  54. foreach ($objeto->qsa as $obj_qsa) {
  55. if ($obj_qsa) {
  56. $juridica->socio .= $obj_qsa->qual . " - ";
  57. $juridica->socio .= $obj_qsa->nome . "\n";
  58. }
  59. }
  60. $juridica->motivo_situacao = $objeto->motivo_situacao;
  61. $juridica->situacao_especial = $objeto->situacao_especial;
  62. $juridica->data_situacao_especial = $objeto->data_situacao_especial;
  63. $juridica->capital_social = $objeto->capital_social;
  64. $juridica->data_inicio = TDate::date2us($objeto->abertura);
  65. //$juridica->faturamento = $objeto->faturamento;
  66. $juridica->complemento = $objeto->complemento;
  67. $juridica->atualizacao_receita = $objeto->ultima_atualizacao;
  68. $juridica->criacao = date('Y-m-d H:i:s');
  69. $juridica->atualizacao = date('Y-m-d H:i:s');
  70. $juridica->store();
  71. return $juridica;
  72. TTransaction::close();
  73. } catch (Exception $e) {
  74. new TMessage('error', $e->getMessage());
  75. //TTransaction::rollback();
  76. }
  77. }
  78. ?>



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


Boa sorte
RB

Miuller,

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

Obrigado.