Como salvar dados de um formulário dinamico no Laravel

Laravel

PHP

JSON

28/01/2019

Eu tenho um campo JSON no projeto laravel, chamado "groups", sendo que eu criei um formulario dianamico com JQUERY, e quero salvar esses dados.
- Abaixo o formato que precisar ir ao banco
[
  {
    "title": "TAXA ZERO",
    "rows": [
      {
        "entrada_percentual": "20%",
        "entrada_valor": "R$ 7.952",
        "parcelas": "+12x",
        "parcelas_valor": "R$ 2.735"
      },
      {
        "entrada_percentual": "20%",
        "entrada_valor": "R$ 7.952",
        "parcelas": "+12x",
        "parcelas_valor": "R$ 2.735"
      }
    ]
  },
  {
    "title": "TAXA ZERO",
    "rows": [
      {
        "entrada_percentual": "20%",
        "entrada_valor": "R$ 7.952",
        "parcelas": "+12x",
        "parcelas_valor": "R$ 2.735"
      }
    ]
  }
]



- Como esta indo ao banco
 
{
    "rows": {
        "parcelas": [
            "123123", 
            "5344"
        ], 
        "entrada_valor": [
            "123123", 
            "4343"
        ], 
        "parcelas_valor": [
            "123123", 
            "66533"
        ], 
        "entrada_percentua": [
            "34312", 
            "321321"
        ]
    }, 
    "title": [
        "Condiçao 1"
    ]
}



- Aquivo que cria o formulario
<hr>
<div class="formulario">
    <div class="itens">

    <div id="item" class="item">
        <div class="form-row">
            <div class="form-group col-md-10">
                {{ Form::label('Titulo')}}
                <input type="text" class="form-control" name="{{$name}}[title][]">
            </div>
            <div class="form-group col-md-2">
                <button class="removerCondicao btn btn-outline-danger" type="button">
                    <i class="fas fa-times-circle"></i>
                </button>
            </div>
        </div>


        <div class="registros">
            <div id="row1" class="content_registros row form-row">
                <div class="form-group col-sm-2">
                    {{ Form::label('% Entrada') }}
                    <input type='text' class='form-control' name='{{$name}}[rows][entrada_percentua][]'>
                </div>

                <div class="form-group col-sm-2">
                    {{ Form::label('Valor de Entrada') }}
                    <input type="text" class="form-control" name="{{$name}}[rows][entrada_valor][]">
                </div>

                <div class="form-group col-sm-2">
                    {{ Form::label('Número de Parcelas') }}
                    <input type="text" class="form-control" name="{{$name}}[rows][parcelas][]">
                </div>

                <div class="form-group col-sm-2">
                    {{ Form::label('Valor das Parcelas') }}
                    <input type="text" class="form-control" name="{{$name}}[rows][parcelas_valor][]">
                </div>

                <div class="form-group col-sm-2">
                    <button class="removerRegistro btn btn-outline-danger" type="button">
                        <i class="fas fa-times-circle"></i>
                    </button>
                </div>
            </div>
        </div>

        <button class="novoRegistro btn btn-outline-primary" type="button">Adicionar Registro</button>
        <hr>
    </div>
    </div>
    <button class="novaCondicao btn btn-outline-primary" type="button">Adicionar Condição</button>
</div>

@push('scripts')
    <script>
        $(document).ready(function () {

            var entrada_per = '{{$name}}[rows][entrada_percentua][]';
            var entrada_valor = '{{$name}}[rows][entrada_valor][]';
            var parcelas = '{{$name}}[rows][parcelas][]';
            var parcelas_valor = '{{$name}}[rows][parcelas_valor][]';

            var $form = $('.formulario'),
                $itens = $form.find('.itens'),

            // Conteudo do Formulário
                $item = $form.find('.item').clone();

            //  Cria uma nova condição
            $form.on('click', '.novaCondicao', function (e) {
                e.preventDefault();
                $item.clone().appendTo($itens);
            });

            // Criando um novo registro
            $form.on('click', '.novoRegistro', function (e) {
                e.preventDefault();

                // Contando as Row da class registro
                length = $(this).parent('.item').children('.registros').children('.row').length;

                fields = '<div id="row' + (length + 1) + '" class="content_registros row form-row">';
                fields += '<div class="form-group col-sm-2"> <label>% Entrada</label> <input type="text" class="form-control" name="'+entrada_per+'' + (length + 1) + '">   </div>';
                fields += '<div class="form-group col-sm-2"> <label>Valor Entrada</label> <input type="text" class="form-control" name="'+entrada_valor+'"> </div>';
                fields += '<div class="form-group col-sm-2"> <label>Número de Parcelas</label> <input type="text" class="form-control" name="'+parcelas + '"> </div>';
                fields += '<div class="form-group col-sm-2"> <label>Parcelas</label> <input type="text" class="form-control" name="'+ parcelas_valor+'"> </div> ';
                fields += '<div class="form-group col-sm-2"> <button class="removerRegistro btn btn-outline-danger" type="button"> <i class="fas fa-times-circle"></i> </button> </div>';

                container = $(this).parent('.item').children('.registros');
                container.append(fields);
            });

            // Remover Registro
            $form.on('click', '.removerRegistro', function () {
                $(this).parents('.content_registros').first().remove();
            });

            // Remover Condicao
            $form.on('click', '.removerCondicao', function () {
                $(this).parents('.item').first().remove();
            });

        });
    </script>

@endpush
Romulo Sousa

Romulo Sousa

Curtidas 0

Melhor post

Vitor Schweder

Vitor Schweder

05/02/2019

Você terá que passar esses parâmetros para uma rota utilizando o verbo http POST, uma requisição $.ajax é mole de fazer, no laravel tu define a rota exemplo Route::post('/cliente/incluir', 'ClienteController@salvar');
Dentro do Controlador vai ter um método salvar (no meu caso):

No Javascript:

$.ajax({
        type:'POST',
        dataType: 'json',
        data:{"nome" : nome, "email" : email},
        url:'cliente/incluir',       
        success: function(retorno) {
        }
    });


No PHP:

public function salvar(Request $request) {
     // Aqui estou validando o campo nome
     $request->validate([
            'nome' => 'required'           
     ]);

    $cliente = new Cliente([
        'nome' => $request->get('nome'), 
        'email' => $request->get('email'),          
    ]);

    $cliente->save();

     return response()->json(json_encode(['id' => $cliente->id]));
}
GOSTEI 2
POSTAR