Insert Multiple Data Laravel

DynamicForm_1

Gambar 1 : Output/Hasil

Untuk melakukan dynamic form kita perlu beberapa trick, untuk awalan kita mulai dari view.Buat view dengan onClick add row dynamic menggunakan JS. 

Ini adalah contoh form yang saya buat, 

<h4>Mohon Lakukan Penyimpanan terlebih dahulu apabila sudah di lakukan perubahan di Form Biaya</h4>
{!! Form::open(['url' => route('pengambilan.store_biaya'), 'method' => 'post'])!!}
<input type="hidden" value="{{Request::segment(3)}}" name="transaksi_harian_id">
<input type="hidden" value="" name="count_tr">
<table class="table" id="table-biaya">
    <thead>
        <tr>
            <th>Nama Biaya</th>
            <th>Jumlah</th>
            <th></th> 
        </tr>
    </thead>
    <tbody id="tbody-biaya">
    @role('operator')
        @if(!empty($transaksi_biayas))
            <?php $arr_biaya = 0; ?>
            @foreach($transaksi_biayas as $transaksi_biaya)
                <tr>
                    <td>
                        {{ $transaksi_biaya->new_biaya->name }}
                    </td>
                    <td>
                        {{ App\Helpers\Money::rupiah($transaksi_biaya->biaya)}}
                    </td>
                    <td class="actions"></td>
                </tr>
                <?php $arr_biaya++;?>
            @endforeach
        @endif
    @endrole
    @role('admin')
        <?php $arr_biaya = 0; ?>
        @foreach($transaksi_biayas as $transaksi_biaya)
        <tr>
            <td>
                <input type="hidden" value="{{$transaksi_biaya->id}}" name="transaksi_biayas[][id]" class="id_biaya">
                <select name="transaksi_biayas[][biaya_id]" class="form-control input-xs biaya-name changeRupiah" id="valueSelected<?php echo $arr_biaya; ?>">
                    @foreach($biayas as $biaya)
                        <option value="{{$biaya->id}}" @if($biaya->id == $transaksi_biaya->biaya_id)selected="selected"@endif
                        data-harga="<?php echo $biaya->harga; ?>" data-id="<?php echo $arr_biaya; ?>">{{$biaya->name}}</option>
                    @endforeach
                </select>
            </td>
            <td>
                <input type="text" value="{{App\Helpers\Money::rupiah($transaksi_biaya->biaya)}}" class="form-control input-xs biaya" name="transaksi_biayas[][biaya]"
                    id="<?php echo 'biaya'.$arr_biaya ?>"/>
            </td>
            <td class="actions"><a class="icon" onclick="delBiaya(this, {{$transaksi_biaya->id}})" id="pointer"><i class="mdi mdi-delete"></i></a></td>
        </tr>
        <?php $arr_biaya++;?>
        @endforeach
    @endrole
    </tbody>
</table>
<button class="btn btn-success" id="addBiaya">+</button>
<hr>
<button class="btn btn-success">Simpan</button>
{!! Form::close()!!}

Selanjutnya kita perlu menambahkan function script jquery, contohnya :

var row_biaya = $('#tbody-biaya');
                    var arr_biaya = document.getElementById('table-biaya').rows.length - 1;
                    $('#addBiaya').on('click', function (e) {
                        e.preventDefault();
                        @role('admin')
                            var content_biaya = '<tr>\n\
                                    <td>\n\
                                        <input type="hidden" name="transaksi_biayas[][id]" value="" class="id_biaya">\n\
                                        <select name="transaksi_biayas[][biaya_id]" class="form-control input-xs biaya-name changeRupiah">\n\
                                            <option value="">----Pilih Biaya-----</option>\n\
                                            <?php foreach($biayas as $biaya):?>\n\
                                                <option value="<?php echo $biaya->id; ?>" data-harga="<?php echo $biaya->harga; ?>" data-id="'+ arr_biaya + '"><?php echo $biaya->name; ?></option>\n\
                                            <?php endforeach;?>\n\
                                        </select>\n\
                                    </td>\n\
                                    <td>\n\
                                        <input name="transaksi_biayas[][biaya]" class="form-control input-xs biaya" id="biaya' + arr_biaya + '" readonly="">\n\
                                    </td>\n\\n\
                                    <td class="actions">\n\
                                        <a class="icon" id="pointer" onclick="delBiaya(this, 0)"><i class="mdi mdi-delete"></i></a></a>\n\
                                    </td>\n\
                                </tr>';
                        @endrole
                        @role('operator')
                            var content_biaya = '<tr>\n\
                                    <td>\n\
                                        <input type="hidden" name="transaksi_biayas[][id]" value="" class="id_biaya">\n\
                                        <select name="transaksi_biayas[][biaya_id]" class="form-control input-xs biaya-name changeRupiah">\n\
                                            <option value="">----Pilih Biaya-----</option>\n\
                                            <?php foreach($biayas as $biaya):?>\n\
                                                <option value="<?php echo $biaya->id; ?>" data-harga="<?php echo $biaya->harga; ?>" data-id="'+ arr_biaya + '"><?php echo $biaya->name; ?></option>\n\
                                            <?php endforeach;?>\n\
                                        </select>\n\
                                    </td>\n\
                                    <td>\n\
                                    <p id="res_biaya' + arr_biaya + '"></p>\n\
                                        <input name="transaksi_biayas[][biaya]" class="form-control input-xs biaya" id="biaya' + arr_biaya + '" readonly="" type="hidden">\n\
                                    </td>\n\\n\
                                    <td class="actions">\n\
                                    </td>\n\
                                </tr>';
                        @endrole
                        addItem(row_biaya, content_biaya);
                        MoneyRupiah('#biaya' + arr_biaya + '');
                        MoneyRupiah('#res_biaya' + arr_biaya + '');
                        arr_biaya++;
                        resetNumsBiaya();
                        rowCountBiaya();
                    });

Untuk function resetnum nya 

var resetNumsBiaya = function () {
            $('#table-biaya .biaya').each(function (i) {
                $(this).attr('name', 'transaksi_biayas[' + i + '][biaya]');
            });
            $('#table-biaya .id_biaya').each(function (i) {
                $(this).attr('name', 'transaksi_biayas[' + i + '][id]');
            });

            $('#table-biaya .biaya-name').each(function (i) {
                $(this).attr('name', 'transaksi_biayas[' + i + '][biaya_id]');
            });
        }

Sehingga ketika di Inspect element bentuk formnya menjadi seperti ini :

DynamicFormInspectElement

Terakhir kita lakukan looping dengan foreach di controller nya untuk sampling codingan nya sebagai berikut :

public function store_biaya(Request $request){
        $transaksi_harian_id = $request->input('transaksi_harian_id');
        foreach ($request->transaksi_biayas as $key => $value) {
            if(empty($value['id'])){
                $transaksi_biayas = new TransaksiRincianBiaya();
                $transaksi_biayas->transaksi_harian_id = $transaksi_harian_id;
                $transaksi_biayas->biaya_id = $value['biaya_id'];
                $transaksi_biayas->biaya = Money::convert_rupiah($value['biaya']);
                $transaksi_biayas->save();
            }else{
                $transaksi_biayas = TransaksiRincianBiaya::find($value['id']);
                $transaksi_biayas->transaksi_harian_id = $transaksi_harian_id;
                $transaksi_biayas->biaya_id = $value['biaya_id'];
                $transaksi_biayas->biaya = Money::convert_rupiah($value['biaya']);
                $transaksi_biayas->save();
            }
        }
        Session::flash("flash_notification", [
                "level"=>"success",
                "message"=>"Telah berhasil di rubah"
        ]);
        return back()->withInput();
    }

Setelah semuanya selesai, coba lakukan simpan data dan silahkan pastikan sudah tersimpan atau belumnya, demikianlah artikel nya, semoga bermanfaat.

 

 

 

Related Articles

Comments