Флажок Laravel сохраняет 0 независимо от введенного пользователем значения

#jquery #laravel

#jquery #laravel

Вопрос:

В настоящее время я работаю над проектом Laravel-5.8. Я использую флажок data-bootstrap-switch в поле динамического ввода

оставить диаграмму

Правила запроса:

 public function rules()
{
    return [
        'leave_type_name' => [
             'required', 
             'string',
             'min:3',
             'max:80',                 
            Rule::unique('hr_leave_types')->where(function ($query) {
           return $query->where('leave_type_name', $this->leave_type_name)
              ->where('company_id', $this->company_id);
        })                
        ],     
        'leave_type_code' => [
             'nullable', 
             'string',
             'max:10',                 
            Rule::unique('hr_leave_types')->where(function ($query) {
           return $query->where('leave_type_code', $this->leave_type_code)
              ->where('company_id', $this->company_id);
        })                
        ],    
                                      
        'employee_type_id'           => 'required|array', 
        'employee_type_id.*' => [
             'required',  
           
        ],    
    ];
}     
  

Контроллер:

 public function store(StoreLeaveTypeRequest $request)
{ 
    $leavetype = new HrLeaveType();
    $leavetype->leave_type_name             = $request->leave_type_name;
    $leavetype->leave_type_code             = $request->leave_type_code;

   $leavetype->save();        

    foreach ($request->employee_type_id as $key => $employee_type_id){

   $insert_array = [
        'employee_type_id'                  => $request->employee_type_id[$key],    
        'weekend_inclusive'                 => $request->weekend_inclusive[$key] ?? 0,
        'holiday_inclusive'                 => $request->holiday_inclusive[$key] ?? 0,
        'leave_type_id'                     => $leavetype->id,
     ];

      HrLeaveTypeDetail::create($insert_array );

       } 
    }
  

Вид

    <form  action="{{route('leave.leave_types.store')}}" method="post" class="form-horizontal" enctype="multipart/form-data">
       {{csrf_field()}}
       
       
       <div class="card-body">
        <div class="form-body">
        <div class="row">  
          <div class="col-12 col-sm-6">
            <div class="form-group">
              <label class="control-label"> Leave Type Name:<span style="color:red;">*</span></label>
              <input  type="text" name="leave_type_name" value="{{ old('leave_type_name', $leavetype->leave_type_name) }}" placeholder="Enter leave type name" class="form-control @error('leave_type_name') is-invalid @enderror">
                @error('leave_type_name')
                    <span class="invalid-feedback" role="alert">
                        <strong>{{ $message }}</strong>
                    </span>
                @enderror                 
            </div>
          </div>

          <div class="col-12 col-sm-6">
            <div class="form-group">
              <label class="control-label"> Leave Type Code:</label>
              <input  type="text" name="leave_type_code" value="{{ old('leave_type_code', $leavetype->leave_type_code) }}" placeholder="Enter leave typecode" class="form-control @error('leave_type_code') is-invalid @enderror">
                @error('leave_type_code')
                    <span class="invalid-feedback" role="alert">
                        <strong>{{ $message }}</strong>
                    </span>
                @enderror                 
            </div>
          </div>                
            
            
          <div class="col-sm-12">
            <div class="form-group">
                <label>Description</label>
                <textarea rows="2" name="description" class="form-control @error('description') is-invalid @enderror" value="{{old('description',$leavetype->description)}}" placeholder="Enter Description here ...">{{old('description',$leavetype->description)}}</textarea>
                @error('description')
                    <span class="invalid-feedback" role="alert">
                        <strong>{{ $message }}</strong>
                    </span>
                @enderror                 
            </div>
          </div>

   <div class="col-sm-12">
            <table class="table table-bordered">
                        <thead>
                        <tr>
                            <th scope="col">Employee Type<span style="color:red;">*</span></th>
                            <th scope="col">Weekend Inclusive</th>
                            <th scope="col">Holiday Inclusive</th>   
                            <th scope="col"><a class="btn btn-info addRow"><i class="fa fa-plus"></i></a></th>
                        </tr>
                        </thead>
                        <tbody>
                        <tr>
                            <td width="40%">                    
                                <select class="form-control select2bs4" data-placeholder="Select Employee Type" tabindex="1" name="employee_type_id[]">
                                    <option value="0" selected="true" disabled="true">Select Employee Type</option>
                                     @if($employeetypes->count() > 0 )
                                        @foreach($employeetypes as $employeetype)
                                         <option name="employee_type_id[]"  value="{{$employeetype->id}}">{{$employeetype->employee_type_name}}</option>
                                        @endforeach
                                    @endif                                         
                                </select>
                            </td>                                                         
                            <td width="10%"><input type="checkbox" name="weekend_inclusive[]"  class="form-control weekend_inclusive" value="{{old('weekend_inclusive') ? 'checked' : '' }}" unchecked data-bootstrap-switch data-off-color="danger" data-on-color="success" data-off-text="NO" data-on-text="YES"></td>
                            <td width="10%"><input type="checkbox" name="holiday_inclusive[]"  class="form-control holiday_inclusive" value="{{old('holiday_inclusive') ? 'checked' : '' }}" unchecked data-bootstrap-switch data-off-color="danger" data-on-color="success" data-off-text="NO" data-on-text="YES"></td>                                
                            <td width="5%"><a class="btn btn-danger remove"> <i class="fa fa-times"></i></a></td>
                         </tr>
                        </tbody>
                    </table>
        </div>
       </div>
     </div>
    </div>          
    <!-- /.card-body -->
    <div class="card-footer">
      <button type="submit" class="btn btn-primary">{{ trans('global.save') }}</button>
    </div>
  

jQuery

 <script type="text/javascript">
    $(document).ready(function(){
        $('.addRow').on('click', function () {
            addRow();

        });
        function addRow() {
            var addRow = '<tr>n'  
'   <td width="40%"><select class="form-control select2bs4" data-placeholder="Choose Employee Type" tabindex="1" name="employee_type_id[]">n'  
       '             <option value="0" selected="true" disabled="true">Select Employee Type</option>n'  
       '              @if($employeetypes->count() > 0 )n'  
       '                 @foreach($employeetypes as $employeetype)n'  
       '                 <option value="{{$employeetype->id}}">{{$employeetype->employee_type_name}}</option>n'  
        '                 @endforeachn'  
        '             @endifn'  
        '         </select></td>n'  
        '        <td width="10%"><input type="checkbox" name="weekend_inclusive[]" class="form-control weekend_inclusive" value="{{old('weekend_inclusive') ? 'checked' : '' }}" unchecked data-bootstrap-switch data-off-color="danger" data-on-color="success" data-off-text="NO" data-on-text="YES"></td>n'  
       '        <td width="10%"><input type="checkbox" name="holiday_inclusive[]" class="form-control holiday_inclusive" value="{{old('holiday_inclusive') ? 'checked' : '' }}" unchecked data-bootstrap-switch data-off-color="danger" data-on-color="success" data-off-text="NO" data-on-text="YES"></td>n'  
'   <td width="5%"><a   class="btn btn-danger remove"> <i class="fa fa-times"></i></a></td>n'  
'         </tr>';
            $('tbody').append(addRow);
            addRemoveListener();
        };
    addRemoveListener();
 });
</script>
  

Я использую флажок переключения начальной загрузки. Флажок может быть либо 0, либо 1

0 = Нет и 1 = Да

Я использую динамические поля ввода. Когда я отправлял, я заметил, что независимо от того, что пользователь выбирает для:

     weekend_inclusive
    holiday_inclusive
  

приложение сохраняет 0 для обоих:

     weekend_inclusive
    holiday_inclusive
  

Как мне решить эту проблему?

Ответ №1:

обязательно поместите этот столбец в $fillable свой класс модели

 protected $fillable = [ 'checkbox_column' ];
  

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

1. он есть в заполняемом

Ответ №2:

На самом деле, если флажок установлен, вы получите значение «включено». Не ‘1’ или ‘true’ или ‘yes’ . Итак, напишите свой код как

   $request->weekend_inclusive[$key] ? 1 : 0;
  

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

1. Я использую tinyint(1) для типа данных. 0 для Not / False и 1 для True / Yes. Пожалуйста, проверьте мой блок просмотра, все ли в порядке, поскольку я написал weekend_inclusive и holiday_inclusive. Или что еще мне нужно сделать?

2. @RahmiRanjanSahoo — я получил эту ошибку ОШИБКА: ErrorException: Неопределенное смещение: 2 в C:xampphtdocsmyappappHttpControllersLeaveLeaveTypesController.php:98 когда я делал $request->weekend_inclusive[$key] ? 1: 0; и он указывает на: ‘holiday_inclusive’ => $request->holiday_inclusive [$key] ? 1 : 0,

Ответ №3:

Пожалуйста, проверьте ваш «employee_type_id []», который вы используете внутри имени элемента выбора и снова внутри элемента опции цикла foreach. Это создает проблему. Пожалуйста, исправьте это.

 <select class="form-control select2bs4" data-placeholder="Select Employee Type" tabindex="1" name="employee_type_id[]">
        <option value="0" selected="true" disabled="true">Select Employee Type</option>
               @if($employeetypes->count() > 0 )
                  @foreach($employeetypes as $employeetype)
                       <option name="employee_type_id[]"  value="{{$employeetype->id}}">{{$employeetype->employee_type_name}}</option>
                  @endforeach
               @endif                                         

</select>
  

Ответ №4:

Пожалуйста, удалите имя из элемента option, оно не требуется. Вы можете выбрать выбранный параметр из имени, которое вы указали в select element .

 <select class="form-control select2bs4" data-placeholder="Select Employee Type" tabindex="1" name="employee_type_id[]">
            <option value="0" selected="true" disabled="true">Select Employee Type</option>
                   @if($employeetypes->count() > 0 )
                      @foreach($employeetypes as $employeetype)
                           <option value="{{$employeetype->id}}">{{$employeetype->employee_type_name}}</option>
                      @endforeach
                   @endif                                         
    </select>
  

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

1. @RashmianjanSahoo — Если я удалю employee_type_id, как мне теперь выполнить ошибку в контроллере

2. Знаете ли вы, как получить выбранное значение параметра в контроллере?? Вы можете выполнить повторный поиск, указав имя в поле выбора, а не имя в элементе опции. Вы можете получить выбранный вами параметр из имени, которое вы упомянули в select element .