Как вставить и удалить запись в базе данных, которая использует динамические c поля Laravel? - PullRequest
0 голосов
/ 30 марта 2020

Я использую Laravel 5. В этом приложении штатное имя может быть добавлено и удалено динамически. Для создания новых записей все функции работают без сбоев. Однако у меня есть некоторые трудности с обновлением записей. На странице «Изменить» отображаются созданные имена сотрудников, которые можно изменить. Эти имена могут быть обновлены. Но я добавил кнопку добавления и кнопку удаления, чтобы позволить пользователю добавить новое имя сотрудника или удалить существующее имя сотрудника.

Моя функция просто может обновить существующую запись в базе данных. Но новое добавленное штатное имя не вставлено в базу данных. Это моя функция для обновления в контроллере.

      public function update(Request $request, $id)
{

    $demo = Demo::findOrFail($id);

    $demo->tajuk_demo = $request->tajuk_demo;
    $demo->syarikat_id = $request->nama_syarikat;
    $demo->peralatan_sistem = $request->peralatan_sistem;
    $demo->tarikhmasa = $request->tarikhmasa;
    $demo->tarikhmasa_tamat = $request->tarikhmasa_tamat;
    $demo->tempat_demo = $request->tempat_demo;
    $demo->ulasan_demo = $request->ulasan_demo;
    $demo->komen_demo = $request->komen_demo;
    $demo->update();

    $pegawai = $request->all();

    // $rekod_id = $pegawai['rekod_id'];
    $itemRegistrationID = $pegawai['nama'];
    $OperasiID = $pegawai['pangkat'];
    $SectionID = $pegawai['bahagian'];

    $pegawai_semasa = Pegawai::where('rekod_id', '=', Input::get('rekod_id'))->exists();


        $peg_hadir = Pegawai::where('demo_id', '=', $id)
                 ->get();

        // Update the existing record
        foreach($peg_hadir as $peg){
        $key = array_search($peg->rekod_id, $pegawai['rekod_id']);
        $peg->itemRegistrationID = $itemRegistrationID[$key];
        $peg->OperasiID = $OperasiID[$key];
        $peg->SectionID = $SectionID[$key];
        $peg->save();
        }


    if (is_null($pegawai_semasa))
    {
        // Insert new record into database
        $count = count(Input::get('nama'));

        // get data
        $itemRegistrationID = Input::get('nama');
        $OperasiID = Input::get('pangkat');
        $SectionID = Input::get('bahagian');

        //loop through and save data
        for($i = 0; $i < $count; ++$i) {

            $pegawai = new Pegawai;
            $pegawai->demo_id = $id;
            $pegawai->itemRegistrationID = $itemRegistrationID[$i];
            $pegawai->OperasiID = $OperasiID[$i];
            $pegawai->SectionID = $SectionID[$i];
            $pegawai->save();
        }  
    }
    else
    {
      return redirect('demo');  
    }

}

Это код в окне просмотра для страницы редактирования:

<div class="form-group">
 <div class="row">
  <input type="button" class="add-row" value="Add">
  <button type="button" class="delete-row">Delete</button>
 </div>
</div>
<!--mula table  -->

<div class="form-group">
 <div class="row">
  <div class="col-lg-10">
    <table class="table table-striped table-bordered" id="pegawaihadir_table" >
      <thead>
        <tr>
          <td class="text-center col-lg-1"><strong>Pilih</strong></td>
          <td class="text-center col-lg-1"><strong>Pangkat</strong></td>
          <td class="text-center col-lg-3"><strong>Nama</strong></td>
          <td class="text-center col-lg-2"><strong>No Badan</strong></td>
          <td class="text-center col-lg-2"><strong>Seksyen</strong></td>
          <td class="text-center col-lg-2"><strong>No Tel</strong></td>
          <td class="text-center col-lg-2"><strong>Ext</strong></td>
        </tr>
      </thead>
        <tbody>

          @foreach($PegawaiHadir as $value)                                           
            <tr>
                <td><input type="checkbox" name="rekod" style="width:20px">
                  {!! Form::hidden('rekod_id[]', $value['rekod_id'], ['class' => 'form-control']) !!}
                </td>
                <td class="text-center">{{ Form::text('pangkat[]', $value['OperasiID'], ['class' => 'form-control pangkat', 'readonly' => 'true']) }}</td>
                <td>
                {{ Form::select('nama[]', $pegawai, $value['itemRegistrationID'], ['class' => 'form-control nama', 'required' => '']) }}
                </td>
                <td class="text-center">{{ Form::text('no[]', $value['Nobadan'], ['class' => 'form-control no', 'readonly' => 'true']) }}</td>
                <td class="text-center">{{ Form::text('bahagian[]', $value['SectionID'], ['class' => 'form-control bahagian', 'readonly' => 'true']) }}</td>
                <td class="text-center">{{ Form::text('telefon[]', $value['notelttp'], ['class' => 'form-control telefon', 'readonly' => 'true']) }}</td>
                <td class="text-center">{{ Form::text('ext[]', $value['ext'], ['class' => 'form-control ext', 'readonly' => 'true']) }}</td>
            </tr> 
          @endforeach                  
      </tbody>
    </table>              
 </div>
</div>

Для полей Dynami c Я использую код js для добавления и удаления записи, отображаемой на странице.

  <script>
count=1;
$(document).ready(function(){
    $(".add-row").click(function(){
        var markup = '<tr><td><input type="checkbox" name="rekod" style="width:20px"></td>';
        markup +=  '<td><input type="text" class="form-control pangkat"  name="pangkat[]" style="width:100px" readonly></td>';
        markup +=  '<td><select class="form-control select2 nama" name="nama[]" style="width:300px"><option value="">Pilih</option><?php foreach($pegawai as $key => $value):echo '<option value="'.$key.'">'.addslashes($value).'</option>'; endforeach; ?></select></td>';
        markup +=  '<td><input type="text" class="form-control no"  name="no[]" style="width:100px" readonly></td>';
        markup +=  '<td><input type="text" class="form-control bahagian" name="bahagian[]" style="width:100px" readonly></td>';
        markup +=  '<td><input type="text" class="form-control telefon" name="telefon[]" style="width:100px" readonly></td>';
        markup +=  '<td><input type="text" class="form-control ext" name="ext[]" style="width:100px" readonly></td></tr>';
        $("table tbody").append(markup);
        count++;

        });

    $(document).on('change', 'select.form-control.nama', function() {
        var PegID = jQuery(this).val();
        var row = $(this);
        // alert(PegID);
           if(PegID)
           {
              jQuery.ajax({
                 context: this,  
                 url : 'get_pegawai/'+PegID,
                 type : "GET",
                 dataType : "json",
                 success:function(data)
                 {
                    console.log(data);
                        $(this).closest('tr').find('td .form-control.pangkat').val(data.operasiname);
                        $(this).closest('tr').find('td .form-control.no').val(data.Nobadan);
                        $(this).closest('tr').find('td .form-control.bahagian').val(data.sectionname);
                        $(this).closest('tr').find('td .form-control.telefon').val(data.notelttp);
                        $(this).closest('tr').find('td .form-control.ext').val(data.ext);  
                 }
              });
           }
           else
           {
              $(this).closest('tr').find('td .form-control.pangkat').empty();
              $(this).closest('tr').find('td .form-control.no').empty();
              $(this).closest('tr').find('td .form-control.bahagian').empty();
              $(this).closest('tr').find('td .form-control.telefon').empty();
              $(this).closest('tr').find('td .form-control.ext').empty();  
           }

    });


    // Find and remove selected table rows
    $(".delete-row").click(function(){
        $("table tbody").find('input[name="rekod"]').each(function(){
            if($(this).is(":checked")){
                $(this).parents("tr").remove();
            }
        });


    });



});    
</script>

Я также не знаю, как определить имя выбранного сотрудника, которое будет удалено из существующей записи в базе данных. Я предоставляю полный код, чтобы облегчить любому, кто хочет помочь лучше понять. Спасибо.

1 Ответ

0 голосов
/ 30 марта 2020

Сделайте этот ajax вызов в IIFE

$(function(){
    $(document).on('change', 'select.form-control.nama', function() {
        var PegID = jQuery(this).val();
        var row = $(this);
        // alert(PegID);
           if(PegID)
           {
              jQuery.ajax({
                 context: this,  
                 url : 'get_pegawai/'+PegID,
                 type : "GET",
                 dataType : "json",
                 success:function(data)
                 {
                    console.log(data);
                        $(this).closest('tr').find('td .form-control.pangkat').val(data.operasiname);
                        $(this).closest('tr').find('td .form-control.no').val(data.Nobadan);
                        $(this).closest('tr').find('td .form-control.bahagian').val(data.sectionname);
                        $(this).closest('tr').find('td .form-control.telefon').val(data.notelttp);
                        $(this).closest('tr').find('td .form-control.ext').val(data.ext);  
                 }
              });
           }
           else
           {
              $(this).closest('tr').find('td .form-control.pangkat').empty();
              $(this).closest('tr').find('td .form-control.no').empty();
              $(this).closest('tr').find('td .form-control.bahagian').empty();
              $(this).closest('tr').find('td .form-control.telefon').empty();
              $(this).closest('tr').find('td .form-control.ext').empty();  
           }

    });
   });

, а также измените метод update() на save() метод в вашем контроллере.

...