Как получить значение тумблера в таблице данных, laravel

#jquery #ajax #laravel

Вопрос:

Я пытаюсь обновить столбец состояния , используя следующий код :

Мой Контроллер :

    function getdata(Request $request)
{
    if(request()->ajax())
    {
        return datatables()->of(Casting::latest()->get())
            ->addColumn('action', function($data){
                $button = '<table><tr><td>';
                $button .= '<button type="button" name="edit" id="'.$data->id.'" class="edit btn btn-primary btn-sm">Modifier</button>';
                $button .= '</td><td>';
                $button .= ' <label  class="switch" >';
                $button .= '  <input type="checkbox" id="'.$data->id.'" class="switch" ';
                
                if ($data->status == 1) {

                    $button .= "checked";
                }

                $button .= '><span class="slider round"></span></label>';
                $button .= '</td></tr></table>';

                return $button;
        })
        ->rawColumns(['action'])
        ->make(true);
    }
    return view('Casting.castingss');
}



 public function changeStatus(Request $request)


    {
        $casting = Casting::find($request->id);
        $casting->status = $request->status;
        $casting->save();
  
        return response()->json(['success'=>'Status change successfully.']);
    }
 

Мой сценарий :

 $('#datatableRows').DataTable({

  processing: true,
  serverSide: true,
  ajax:{
   url: "{{ route('castingss.getdata') }}",
  },
  columns:[
  
   {
    data: 'casting_photo',
    name: 'casting_photo',
    render: function(data, type, full, meta){
              return "<img src={{ URL::to('/') }}/castingimages/"   data    " class='list-thumbnail responsive border-0 card-img-left' />";
    },
    orderable: false
   },
   {data:'casting_name',
    name: 'casting_name',
    render:function(data,type,full,meta){
      return "<a href='profile'>"   data   "</a>";
    }
   },
    {
    data: 'casting_cin',
    name: 'casting_cin'
   },
    {
    data: 'casting_phone',
    name: 'casting_phone'

            },
   
   {
    data: 'action',
    name: 'action',
    orderable: false
   }
  ],
     
 });

$(document).on('change', '.switch', function(){

        var status = $(this).prop('checked') == true ? 1 : 0; 

          var id = $(this).attr('id');

            $.ajax({

            type: "GET",

            dataType: "json",

            url: '/changeStatus',

            data: {'status': status, 'id': id},

            success: function(data){

              console.log(data.success)

            }

        });

    });
 

Когда я запускаю ewecute , я получаю следующую ошибку : «сообщение»: «Создание объекта по умолчанию из пустого значения» В моем контроллере , строка : $casting->status = $request->status;

Я предполагаю, что для переменной состояния нет значения. как я могу определить значение пользовательского переключателя внутри таблицы данных Как я могу решить эту проблему ? если у вас есть какие-либо идеи, помогите мне

Комментарии:

1. возможно, проблема с идентификатором не определена .попробуйте предупредить(идентификатор), получите ли вы значение или нет

Ответ №1:

Есть две возможности .Один из них-данные получены пустыми, поэтому лучше проверить правильность передачи данных контроллеру. Если его правильный, то переданный идентификатор модели литья отсутствует.Так что добавьте проверку для этого

  public function changeStatus(Request $request)
{
   $request->validate(['status'=>'required','id'=>'required']);
    $casting = Casting::find($request->id);
    if($casting){
    $casting->status = $request->status;
    $casting->save();
   return response()->json(['success'=>'Status change successfully.']);
    }
   return response()->json(['failed'=>'Status change failed.'],422);
       
    }
 

Обновленный

Поскольку вы использовали switch имя класса для label , а также для input checkbox так

  $button .= '  <input type="checkbox" id="'.$data->id.'" class="switch selectRow" ';
 

затем измените

 $(document).on('change', '.selectRow', function(){
 

Комментарии:

1. также лучше, если первое предупреждение в идентификаторе javacript будет получено или нет

2. , он получает идентификатор , но я получаю сейчас {«сообщение»:»Данные были неверными.»,»ошибки»:{«идентификатор»:[«Поле идентификатора обязательно».]}}

3. тогда значение идентификатора не передается.проблема с идентификатором в основном не определена.проверьте предупреждение(идентификатор) перед вызовом ajax

4. похоже, вы использовали класс switch для маркировки, а также для ввода, поэтому добавьте еще один новый класс для ввода, который уникален для ввода, а затем измените $(документ).on («изменить»,». switch», функция(){ здесь

5. У меня есть вопрос, если это возможно, могу ли я одновременно изменить статус на 0 и скрыть его от datatable?