#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 .