Retorn urldecode($result->getBody());
Carlos, bom dia.
Abri outro ticket sobre o guzzle/API
Bom, eu estava fazendo a requisição assim em json:
Cotinuando porque não coube:
"{"mensagem":"Ok","dados":[{"preventiva_id":155226,"status":"Em an\u00e1lise pelo fornecedor","predio":"ACAA-ACAA","UF":"MG","preventiva_tipo":"Limpeza","checklist_id":null,"data_programada":"2019-12-01","ciclo":20,"periodicidade":"SEMESTRAL","ultima_preventiva":null,"justificativa":null},{"preventiva_id":155230,"status":"Em an\u00e1lise pelo ...
Agora preciso pegar estes dados e gravar numa tabela com estes campos.
NÃo estou sabendo fazer isto. Como pego cada variável e dou um insert?
Obrigado.
Se quiser olhar, o código está em https://github.com/marcosbirrocalixto/helper/invitations
Olá, Marcos!
Tudo bem?
Primeiro passo é converte esses dados para JSON, atualmente é uma string:
$json = json_encode($preventivas);
Agora debug novamente e veja que tem os dados formatados:
dd($json);
Observe que retorna um array, porntato você pode interar em um loop para conseguir inserir:
foreach ($json['dados'] as $dado) {
// Insere aqui...
dd($dado);
}
Carlos, eu estou tendi dificuldades com isto! Olha o erro que está dando!
- //$preventivas = json_decode($result->getBody());
- $preventivas = urldecode($result->getBody());
- $preventivasjson = json_decode($preventivas);
- //dd($preventivasjson);
- foreach ($preventivasjson['dados'] as $dado) {
- // Insere aqui...
- dd($dado->preventiva_id);
- }
- return view('api.ssp.preventivas.index', compact('preventivasjson'));
- }
- /**
- * Show the form for creating a new resource.
- *
- * @return \Illuminate\Http\Response
- */
- public function create()
- {
- //
- }
- /**
- * Store a newly created resource in storage.
- *
-
"Cannot use object of type stdClass as array"
Olá, Marcos!
Por que usou o urldecode ao invés do json_decode?
Esse erro é porque você está tentando acessar o objeto (stdClass) como se fosse um array, deve ser assim (dentro do loop):
dd($preventivasjson->dados);
Se tiver em dúvida, verifique o tipo:
https://www.php.net/manual/pt_BR/function.gettype.php
Esrq API é de um cliente e tenho que obedecer a documentação. Eles usam este urldecode para retornar a API deeles.
Agora tenho que pegar estes dados e inserir numa tabela.
Obrigado.
Mas, fazendo assim deu certo?
dd($preventivasjson->dados);
O que tem nessa variável mesmo?
dd($preventivasjson);
Qual é o tipo de dado?
dd(gettype($preventivasjson));
Bom dia.
dd($preventivasjson->dados) deu certo sim.
Agora vou criar a tabela e gravar estes dados que peguei do cliente. Vou fazer uma rotina para inserir caso não existe e update casoo exista.
Esta rotina rodará como cron para buscar as OSs e atualizá-las.
O retorno de dd(gettype($preventivasjson)); é "object"
Fiz o foreach e gerou a view como teste. Agora é fazer o forwach para inserir ou atualizar a tabela.
Este sistema está fcando muito grande. Além do laravel, tem o ACL, API para conectar ao aplicativo kotlin e API ara comenectar ao cliente OI. Vai rodar no país inteiro. Tenho muito que fazer... Otimizar código, reescrever algumas rotinas mas está indo.
Muito obrgado Carlos.
Boa tarde Carlos.
Como posso fazer este insert? Eu não lembro de ter alguma aula sobre este tipo de insert!
Fiz assim:
{ # 575 ▼ + " preventiva_id ": 155226 + " status ": " Em análise pelo fornecedor " + " predio ": " ACAA-ACAA " + " UF ": " MG " + " preventive_type ": " Limpeza " }
Insert. A model é Preventiva e está com o fillable ok
Você pode inserir de diversas formas.
Uma delas seria inserir item por item dentro deste loop, exemplo:
foreach ( $preventivas->dados as $preventiva ) {
$objeto = new NomeDoModel;
$objeto->preventiva_id = $preventiva->preventiva_id;
$objeto->status = $preventiva->status;
$objeto->predio = $preventiva->predio;
$objeto->UF = $preventiva->UF;
$objeto->preventive_type = $preventiva->preventive_type;
$objeto->save();
}
Outra alternativa:
foreach ( $preventivas->dados as $preventiva ) {
NomeDoModel::create([
'preventiva_id' => $preventiva->preventiva_id,
'status' => $preventiva->status,
'predio' => $preventiva->predio,
'UF' => $preventiva->UF,
'preventive_type' => $preventiva->preventive_type,
]);
}
Você também pode criar um array multidimensional desses items no loop, e inserir uma única vez com o método insert.
NomeDoModel::insert($array_multidimensional);
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!