Save items from a Checklist form in the database - Laravel

Asked

Viewed 299 times

2

I have a Checklist form that is generated dynamically. When saving the array persists in the error message:

Array to string Conversion (SQL: update checklist_protocolo set projeto_id = 4, modelo_id = 6, item = 0, item_descricao_id = 5, sim_nao = S, dt_validade = 2019-05-09, pagina_documento = 1, observacao = Where Annotation projeto_id = 4)

The display of the form inserir a descrição da imagem aqui

The method of registering the Checklist

public function cadastroChecklistProtocolo(Request $request)
    {
        $projeto = $request->projeto_id;       
        $dados = $request->except('_token');
        $dt_validade = $dados['dt_validade'];
        $pagina_documento = $dados['pagina_documento'];
        $observacao = $dados['observacao'];
        $sim_nao = $dados['sim_nao']; 
        $item = $dados['item'];
        $item_descricao_id = $dados['item_descricao_id'];

        for($i = 0; $i < count($dt_validade); $i++)
        {
            $dado = array(
                'dt_validade' => $dt_validade[$i],
                'pagina_documento' => $pagina_documento[$i],
                'observacao' => $observacao[$i],
                'sim_nao' => $sim_nao[$i],
                'item' => $item[$i],
                'item_descricao_id' => $item_descricao_id[$i]
                );
            $checklistsProtocolos = checklistProtocolo::where('projeto_id', $projeto)->update($dado);    

        }

     $response = true;

        if($response)
        {
            return redirect()
                      ->route('projeto.edita', $request->projeto_id)
                      ->with('success',"Sucesso ao atualizar os Checklists do Protocolo");
        }else
        {
            return redirect()
                      ->back()
                      ->with('error',"Erro ao atualizar o Checklists do Protocolo"); 
        } 
    }      

View

@foreach($checklistsProtocolos as $checklistProtocolo)

                                <tr>
                                    <td><input type="text" class="form-control"  id="item" name="item[]" value="{{$checklistProtocolo->item}}"  size ="2"></td>
                                    <td>{{$checklistProtocolo->descricao_item}}</td>   
                                    <input type="hidden"          id="item_descricao_id"  name="item_descricao_id[]" value="{{$checklistProtocolo->item_descricao_id}}">
                                    <td>  <select type="text" class="form-control" id="sim_nao" name="sim_nao[]" style="width:125px;">
                                            <option value="">Selecione</option>
                                            <option value="S" {{$checklistProtocolo->sim_nao == 'S' ? 'selected' : '' }}>Sim</option>
                                            <option value="N" {{$checklistProtocolo->sim_nao == 'N' ? 'selected' : '' }}>Não</option>
                                            <option value="R" {{$checklistProtocolo->sim_nao == 'R' ? 'selected' : '' }}>Não Atende</option>
                                    </select> </td>
                                    <td><input type="date"        id="dt_validade"        name="dt_validade[]" value="{{$checklistProtocolo->dt_validade}}"></td>
                                    <td><input type="text"        id="pagina_documento"   name="pagina_documento[]" value="{{$checklistProtocolo->pagina_documento}}" size ="1"></td>
                                    <td><input type="text"        id="observacao"         name="observacao[]" value="{{$checklistProtocolo->observacao}}" size ="1" style="width: 300px; height: 60px"></td>
                                </tr>

                                @endforeach 

The array data view:

Unexpected result:

inserir a descrição da imagem aqui

inserir a descrição da imagem aqui

Expected result:

inserir a descrição da imagem aqui

1 answer

2


The solution applied was to create a variable ($cont) to count line of each array within the loop of repetition in the registerChecklistProtocolo method.

Follows code:

$cont = 0; //contador de linhas para os arrays

    for($i = 0; $i < count($dt_validade); $i++){

     $dataInsert = array( 'sim_nao' => $sim_nao[$cont],                   
                         'dt_validade'=> $dt_validade[$cont], 
                         'pagina_documento' =>$pagina_documento[$cont], 
                         'observacao' =>$observacao[$cont]);           

     $checklistsProtocolos = checklistProtocolo::where('projeto_id', $projeto_id)
     ->whereIn('item_descricao_id', (array)$item_descricao_id[$cont])  //atualiza linha por linha do array
     ->update($dataInsert);
      $cont++; //atualiza linha por linha do array
      } 

Browser other questions tagged

You are not signed in. Login or sign up in order to post.