[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Regina Weigert
Criador Regina Weigert 14/04/2019

Como dar update passando um array multidimensional?

Manager Carlos Ferreira 14/04/2019

Olá Regina, tudo bem?

No caso para editar será necessário fazer um loop. Diferente da ação de salvar que permite passar um array com vários registros a serem inseridos, para editar é diferente, precisa especificar exatamente qual registro é para editar.

Você tem o formato do array dos registros que deseja editar? Se quiser me enviar, posso te dá um exemplo aplicado ao que já possui.

Carlos Ferreira
Criador Regina Weigert 14/04/2019

Esse é o endipont:

O endpoint é esse:

{

    "data": {

        "cd_curso": 65,

        "tx_nome": "Embriologia TGI XXXXX",

        "tx_descricao": "

Embriologia do TGI

",

        "tx_programa": "

 

",

        "tx_corpo_docente": "",

        "nr_max_alunos": 0,

        "dt_criacao": "2016-02-13",

        "dt_inicio": "2017-08-25",

        "dt_fim": "2028-04-14",

        "ds_img_apresentacao": "1519388019-curso-img-002.jpg",

        "ds_link_demo_video": "https://www.youtube.com/embed/zz8iaJ9_tX8",

        "cd_modelo_curso": 1,

        "dt_publicacao": "2017-08-23 00:00:00",

        "st_modo_curso": 1,

        "referencia": "embriologia SSSSS",

        "ds_arquivo_termos": "",

        "dt_fim_inscricao_curso": "2026-07-16",

        "st_status_publicacao": 1,

        "st_demo": 0,

        "ds_msg_email_confirmacao": "",

        "ds_ano": null,

        "co_curso_especialidade": null,

        "co_curso_segmento": null,

        "idSubdisciplina": null,

        "idPeriodo": null,

        "uf": "RJ",

        "st_concurso": 2,

        "tx_nome_reduzido": "",

        "tx_descricao_breve": "Embriologia",

        "cd_categoria_curso": 4,

        "st_ordenacao": 2,

        "id_empresa": 1,

        "updated_at": "2019-04-14 19:34:34",

        "created_at": "2018-10-31 13:02:21",

        "subdisciplinas": [],

        "modalidades": [

            {

                "co_modalidade_concurso": 39,

                "ds_modalidade_concurso": "ATP-ACB",

                "tx_nome_concurso": "SMS",

                "co_publico_alvo": 1,

                "sg_modalidade_concurso": "ATP\t\t\t\t",

                "tx_modalidade_concurso": "Atenção Primária",

                "id_empresa": 1,

                "pivot": {

                    "cd_curso": 65,

                    "co_modalidade": 39

                }

            },

            {

                "co_modalidade_concurso": 65,

                "ds_modalidade_concurso": "CTI-ACB",

                "tx_nome_concurso": "DOR",

                "co_publico_alvo": 1,

                "sg_modalidade_concurso": "CTI",

                "tx_modalidade_concurso": "Centro de Tratamento Intensivo",

                "id_empresa": 1,

                "pivot": {

                    "cd_curso": 65,

                    "co_modalidade": 65

                }

            },

            {

                "co_modalidade_concurso": 67,

                "ds_modalidade_concurso": "CTI-ACB",

                "tx_nome_concurso": "HIAS",

                "co_publico_alvo": 1,

                "sg_modalidade_concurso": "CTI",

                "tx_modalidade_concurso": "Centro de Tratamento Intensivo",

                "id_empresa": 1,

                "pivot": {

                    "cd_curso": 65,

                    "co_modalidade": 67

                }

            },

            {

                "co_modalidade_concurso": 85,

                "ds_modalidade_concurso": "CTI-ACB",

                "tx_nome_concurso": "JKDOR",

                "co_publico_alvo": 1,

                "sg_modalidade_concurso": "CTI",

                "tx_modalidade_concurso": "Centro de Tratamento Intensivo",

                "id_empresa": 1,

                "pivot": {

                    "cd_curso": 65,

                    "co_modalidade": 85

                }

            },

            {

                "co_modalidade_concurso": 89,

                "ds_modalidade_concurso": "CTI-ACB",

                "tx_nome_concurso": "JK",

                "co_publico_alvo": 1,

                "sg_modalidade_concurso": "CTI",

                "tx_modalidade_concurso": "Centro de Tratamento Intensivo",

                "id_empresa": 1,

                "pivot": {

                    "cd_curso": 65,

                    "co_modalidade": 89

                }

            }

        ],

        "coordenadores": [

            {

                "cd_curso": 65,

                "cd_professor": 23,

                "pivot": {

                    "cd_curso": 65,

                    "cd_professor": 23

                }

            },

            {

                "cd_curso": 65,

                "cd_professor": 29,

                "pivot": {

                    "cd_curso": 65,

                    "cd_professor": 29

                }

            },

           

    },

    "status": true

}

 

Regina Weigert
Criador Regina Weigert 14/04/2019

Estou tentando gravar so modalidades[]:

public function update(Request $request, $id)

    {

       

    

        foreach ($data as $value) {

            //if(isset($data['tx_nome'])? $data['tx_nome'] : NULL)

            if (empty($value)) {

                $value = NULL;

                //echo $value."<br>";

            }

        }

        //dd($data);

        $guzzle   = new Guzzle; 

        if (isset($data['select-modalidade'])) {

            $result = $guzzle->get(config('ambiente.URL_API').'modalidades/');

            $modalidades = json_decode($result->getBody(),true);

        //Aqui monto cada modalidade vinda no request

        foreach ($modalidades['data'] as $modalidade) {

            for ($i=0; $i < count($data['select-modalidade']); $i++) { 

                $key = in_array($data['select-modalidade'][$i],$modalidade);

                if ($key) {

                    //$data['select-modalidade'][$i] = $modalidade; 

                    $data['select-modalidade'][$i] = ["co_modalidade_concurso" => $modalidade['co_modalidade_concurso'],

                                                            "ds_modalidade_concurso" => $modalidade['ds_modalidade_concurso'],

                                                            "tx_nome_concurso" => $modalidade['tx_nome_concurso'],

                                                            "ds_modalidade_concurso" => $modalidade['ds_modalidade_concurso'],

                                                            "co_publico_alvo" => $modalidade['co_publico_alvo'],

                                                            "sg_modalidade_concurso" => $modalidade['sg_modalidade_concurso'],

                                                            "tx_modalidade_concurso" => $modalidade['tx_modalidade_concurso'],

                                                            "id_empresa" => $modalidade['id_empresa'],

                                                            "pivot" => 

                                                            ["cd_curso" => $data['cd_curso'],

                                                            "co_modalidade" => $modalidade['co_modalidade_concurso'],

                                                            ]

                    ];

                }

            }

            

        }

     

        $mod = $data['select-modalidade'];

        }

              

            /*try{

                $options = [

                'tx_nome' =>  $data['tx_nome'],

                'referencia' =>  $data['referencia'],

                'cd_categoria_curso' =>  $data['cd_categoria_curso'],

                'cd_modelo_curso' =>  $data['cd_modelo_curso'],

                'st_status_publicacao' =>  $data['st_status_publicacao'],

                'tx_descricao_breve' =>  $data['tx_descricao_breve'],

                'tx_descricao' =>  $data['tx_descricao'],

                'st_concurso' =>  $data['st_concurso'],

                'modalidades[]' => $mod ];

                    

            $options = json_encode($options); dd($options);*/

                $result = $guzzle->put(config('ambiente.URL_API').'cursos/'.$id,[ 

                'form_params'  => ['modalidades[]' => $mod ]]

               

 

               

                ]);

    //echo $result->getStatusCode();exit;

                /*'form_params' =>  [

                'tx_nome' =>  $data['tx_nome'],

                'referencia' =>  $data['referencia'],

                'cd_categoria_curso' =>  $data['cd_categoria_curso'],

                'cd_modelo_curso' =>  $data['cd_modelo_curso'],

                'st_status_publicacao' =>  $data['st_status_publicacao'],

                'tx_descricao_breve' =>  $data['tx_descricao_breve'],

                'tx_descricao' =>  $data['tx_descricao'],

                'modalidades' => array($data['select-modalidade'])

                ]

            ]);*/

                

                $response = $result->getBody()->getContents();

                $cursos = json_decode($response);

                

            } catch (RequestException $e){

                echo "erro = ".$e;exit;

            }

 

           return redirect()->action('CursosDescricaoController@index', ['id' => $id]);        

        

        

    }

Regina Weigert
Criador Regina Weigert 14/04/2019

Desculpe a funcao estava com alguns erros. Corrigidos agora:

public function update(Request $request, $id)

    {

       

        $data = $request->all();

        foreach ($data as $value) {

            //if(isset($data['tx_nome'])? $data['tx_nome'] : NULL)

            if (empty($value)) {

                $value = NULL;

                //echo $value."<br>";

            }

        }

        //dd($data);

        $guzzle   = new Guzzle; 

        if (isset($data['select-modalidade'])) {

            $result = $guzzle->get(config('ambiente.URL_API').'modalidades/');

            $modalidades = json_decode($result->getBody(),true);

        //Aqui monto cada modalidade vinda no request

        foreach ($modalidades['data'] as $modalidade) {

            for ($i=0; $i < count($data['select-modalidade']); $i++) { 

                $key = in_array($data['select-modalidade'][$i],$modalidade);

                if ($key) {

                    //$data['select-modalidade'][$i] = $modalidade; 

                    $data['select-modalidade'][$i] = ["co_modalidade_concurso" => $modalidade['co_modalidade_concurso'],

                                                            "ds_modalidade_concurso" => $modalidade['ds_modalidade_concurso'],

                                                            "tx_nome_concurso" => $modalidade['tx_nome_concurso'],

                                                            "ds_modalidade_concurso" => $modalidade['ds_modalidade_concurso'],

                                                            "co_publico_alvo" => $modalidade['co_publico_alvo'],

                                                            "sg_modalidade_concurso" => $modalidade['sg_modalidade_concurso'],

                                                            "tx_modalidade_concurso" => $modalidade['tx_modalidade_concurso'],

                                                            "id_empresa" => $modalidade['id_empresa'],

                                                            "pivot" => 

                                                            ["cd_curso" => $data['cd_curso'],

                                                            "co_modalidade" => $modalidade['co_modalidade_concurso'],

                                                            ]

                    ];

                }

            }

            

        }

     

        $mod = $data['select-modalidade'];

        dd($mod);

        }

              

            try{

                $options = [

                'tx_nome' =>  $data['tx_nome'],

                'referencia' =>  $data['referencia'],

                'cd_categoria_curso' =>  $data['cd_categoria_curso'],

                'cd_modelo_curso' =>  $data['cd_modelo_curso'],

                'st_status_publicacao' =>  $data['st_status_publicacao'],

                'tx_descricao_breve' =>  $data['tx_descricao_breve'],

                'tx_descricao' =>  $data['tx_descricao'],

                'st_concurso' =>  $data['st_concurso'],

                'modalidades[]' => $mod ];

                    

            $options = json_encode($options); dd($options);

                $result = $guzzle->put(config('ambiente.URL_API').'cursos/'.$id,[ 

                'form_params'  => ['modalidades[]' => $mod ]

               

 

               

                ]);

    //echo $result->getStatusCode();exit;

                /*'form_params' =>  [

                'tx_nome' =>  $data['tx_nome'],

                'referencia' =>  $data['referencia'],

                'cd_categoria_curso' =>  $data['cd_categoria_curso'],

                'cd_modelo_curso' =>  $data['cd_modelo_curso'],

                'st_status_publicacao' =>  $data['st_status_publicacao'],

                'tx_descricao_breve' =>  $data['tx_descricao_breve'],

                'tx_descricao' =>  $data['tx_descricao'],

                'modalidades' => array($data['select-modalidade'])

                ]

            ]);*/

                

                $response = $result->getBody()->getContents();

                $cursos = json_decode($response);

                

            } catch (RequestException $e){

                echo "erro = ".$e;exit;

            }

 

           return redirect()->action('CursosDescricaoController@index', ['id' => $id]);        

        

        

    }

Regina Weigert
Criador Regina Weigert 14/04/2019

dd($mod) retorna:array:5 [

  0 => array:8 [
    "co_modalidade_concurso" => 65
    "ds_modalidade_concurso" => "CTI-ACB"
    "tx_nome_concurso" => "DOR"
    "co_publico_alvo" => 1
    "sg_modalidade_concurso" => "CTI"
    "tx_modalidade_concurso" => "Centro de Tratamento Intensivo"
    "id_empresa" => 1
    "pivot" => array:2 []
  ]
  1 => array:8 [
    "co_modalidade_concurso" => 67
    "ds_modalidade_concurso" => "CTI-ACB"
    "tx_nome_concurso" => "HIAS"
    "co_publico_alvo" => 1
    "sg_modalidade_concurso" => "CTI"
    "tx_modalidade_concurso" => "Centro de Tratamento Intensivo"
    "id_empresa" => 1
    "pivot" => array:2 []
  ]
  2 => array:8 [
    "co_modalidade_concurso" => 89
    "ds_modalidade_concurso" => "CTI-ACB"
    "tx_nome_concurso" => "JK"
    "co_publico_alvo" => 1
    "sg_modalidade_concurso" => "CTI"
    "tx_modalidade_concurso" => "Centro de Tratamento Intensivo"
    "id_empresa" => 1
    "pivot" => array:2 []
  ]
]

Já tentei dar um encode e enviar como json. Não funcionou. 

Regina Weigert
Manager Carlos Ferreira 14/04/2019

Olá!

O caminho é esse mesmo, será necessário fazer um loop e recuperar o registro e fazer o update de item por item (dentro do loop).

No caso você precisa pegar esse retorno que está em JSON e usar a função do PHP json_decode para transformar em um [fazer  o loop para modificar.

Neste exemplo:
$response = [
  [
    "co_modalidade_concurso" => 65
    "ds_modalidade_concurso" => "CTI-ACB"
    "tx_nome_concurso" => "DOR"
    "co_publico_alvo" => 1
    "sg_modalidade_concurso" => "CTI"
    "tx_modalidade_concurso" => "Centro de Tratamento Intensivo"
    "id_empresa" => 1
    "pivot" => [
  ],
  [
    "co_modalidade_concurso" => 67
    "ds_modalidade_concurso" => "CTI-ACB"
    "tx_nome_concurso" => "HIAS"
    "co_publico_alvo" => 1
    "sg_modalidade_concurso" => "CTI"
    "tx_modalidade_concurso" => "Centro de Tratamento Intensivo"
    "id_empresa" => 1
    "pivot", [
  ],
  [
    "co_modalidade_concurso" => 89
    "ds_modalidade_concurso" => "CTI-ACB"
    "tx_nome_concurso" => "JK"
    "co_publico_alvo" => 1
    "sg_modalidade_concurso" => "CTI"
    "tx_modalidade_concurso" => "Centro de Tratamento Intensivo"
    "id_empresa" => 1
    "pivot", [
  ],
];

foreach ($response as $data) {
    $model = NameModel::where('co_modalidade_concurso', $data['co_modalidade_concurso'])->first();

    $model->update($data);
}

Carlos Ferreira
Criador Regina Weigert 14/04/2019

Por favor, seria isso? Pq  não funcionou. 

$guzzle   = new Guzzle; 

        if (isset($data['select-modalidade'])) {

            $result = $guzzle->get(config('ambiente.URL_API').'modalidades/');

            $modalidades = json_decode($result->getBody(),true);

            //Aqui monto cada modalidade vinda no request

            foreach ($modalidades['data'] as $modalidade) {

            //dd($modalidade);

                for ($i=0; $i < count($data['select-modalidade']); $i++) { 

                    $key = in_array($data['select-modalidade'][$i],$modalidade);

                    if ($key) {

                    //$data['select-modalidade'][$i] = $modalidade; 

                        $data['select-modalidade'][$i] = ["co_modalidade_concurso" => $modalidade['co_modalidade_concurso'],

                                                            "ds_modalidade_concurso" => $modalidade['ds_modalidade_concurso'],

                                                            "tx_nome_concurso" => $modalidade['tx_nome_concurso'],

                                                            "ds_modalidade_concurso" => $modalidade['ds_modalidade_concurso'],

                                                            "co_publico_alvo" => $modalidade['co_publico_alvo'],

                                                            "sg_modalidade_concurso" => $modalidade['sg_modalidade_concurso'],

                                                            "tx_modalidade_concurso" => $modalidade['tx_modalidade_concurso'],

                                                            "id_empresa" => $modalidade['id_empresa'],

                                                            "pivot" => 

                                                            ["cd_curso" => $data['cd_curso'],

                                                            "co_modalidade" => $modalidade['co_modalidade_concurso'],

                                                            ]

                        ];

                    //dd($data['select-modalidade'][$i]);

 

                

                    }

                

               

                }

            

            

            }

            $options = $data['select-modalidade'];

            //($options);

            foreach ($options as $option) {

               try{

                

                $result = $guzzle->put(config('ambiente.URL_API').'cursos/'.$id, [ 

                    'form_params'  => ['modalidades'=> $option]

 

                ]);

                //dd($option);exit;

                $response = $result->getBody()->getContents();

                $cursos = json_decode($response);

 

    //echo $result->getStatusCode();exit;

             

                

                } catch (RequestException $e){

                    echo "erro = ".$e;exit;

                }

            }

        }

              

            

 

           return redirect()->action('CursosDescricaoController@index', ['id' => $id]);   

Regina Weigert
Manager Carlos Ferreira 14/04/2019

 Olá!

Por mais que me passou um debug dos dados esse retorno ainda é muito abstrato para mim conseguir analisar esse trecho de código e entender onde errou.

Vi que organizou os itens em um array, mas não vi o update.

Ou seja, onde recupera o registro e faz o update definitivo: Model::where('col', value)->first()->update($data)

Esse retorno dessa API, porque retorna tantos registros para serem atualizados?

Embora eu tenha uma visão muito limitada do seu projeto, acredito que usar alguma tecnologia frontend (como o Vue.js por exemplo) tornaria o seu trabalho muito mais simples, especialmente no tocante requisições na API.

Carlos Ferreira
Criador Regina Weigert 14/04/2019

Retorna muitos registros pq a API tem varios joias com outras tabelas. E eu estou usando o Guzzle. 

Regina Weigert
Manager Carlos Ferreira 14/04/2019

Foi apenas uma curiosidade, porque esse tipo de comportamento em uma API não é algo comum, pelo menos não para fazer update em múltiplos registros, mas sim para inserir.

Talvez migrar o projeto para o Vue.js dê um bom trabalho, não tem problemas, dá para fazer com o Guzzle, como está fazendo.

Está faltando recuperar o registro no loop e fazer o update.

Dentro do loop (do retorno da API) precisa fazer algo semelhante a isso:
$objectModel = Model::where('co_modalidade_concurso', $modalidade['co_modalidade_concurso'])->first();

// $data é interação do loop
$objectModel->update($data);

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!