Как исправить «Создание объекта по умолчанию из пустого значения» в Laravel?

В клинке у меня есть этот код:

@foreach ($employees as $key => $employee)
<tr id="{{$employee->id}}">
<td class="visibleemployee tdcenter">
<form action="{{route('admin.employees.cambiarVisible',$employee->id)}}">
<button type="button" id="buttonchangevisible" data-id="{{$employee->id}}">
@if ($employee->public == '1')
<i class="fa fa-check" aria-hidden="true" id="margindataemployee" class="cambiarsiporno"></i>
@else
<i class="fa fa-times" aria-hidden="true" id="margindataemployee"></i>
@endif
</button>
<input type="hidden" name="_token" value="{{Session::token()}}">
</form>
</td>
</tr>
@endforeach

Когда я нажимаю на нижнюю часть, выполняется функция Ajax:

$("#buttonchangevisible").click(function(e){
e.preventDefault();
var button = $(this);
var id = button.data('id');
var formData = new FormData($(this)[0]);
$.ajax({
url:'employee/cambiarVisible/' + id,
type: 'PUT',
data: formData,
success: function() {
location.reload();
},
cache: false,
contentType: false,
processData: false
});
return false;
});

И вызовите следующий метод:

public function cambiarVisible(Request $request, $id)
{
$employee = Worker::find($id);
if ($employee->public = 0){
DB::table('workers')->where('id',$id)
->first()
->$employee->public = 1;
}
else{
$employee->public = 0;
}
$employee->save();
}

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

Но если я нажму в другом ряду, не звони.

-1

Решение

Я написал похожий кусок кода.
Я сгенерировал форму динамически, затем вызвал некоторый JavaScript / jQuery.

Код для генерации кнопки:

<button class="btn btn-danger btn-block deleteUserBtn" data-name="{{ $user->name }}" data-id="{{ $user->id }}" data-type="delete" onclick="return false;"><i class="glyphicon glyphicon-trash"></i> Delete</button>

Затем, используя следующий код, я выполнил вызов ajax. Причина, по которой событие click прикреплено к телу, заключается в том, что имеется несколько кнопок удаления (это было для обзора пользователя с несколькими кнопками удаления, по одной для каждого пользователя). И эти кнопки могут быть сгенерированы с помощью jQuery, событие щелчка не сработает, если вы свяжетесь с кнопками.

$('body').on('click', '.deleteUserBtn', function() {
var button = $(this) // Button that triggered the event
var id = button.data('id');
var name = button.data('name');
var csrf = $('input[name=_token]').val(); // This token is already on the page, you need a token to prevent csrf

if( confirm('Are you sure you want to delete: ' + name + '?') ) {
var url = "{{ route('overview.users.destroy', ':id') }}";
url = url.replace(':id', id);
$.ajax({
method: "DELETE",
url: url,
data: {
'id': id,
'_token': csrf
},
}).done(function(response) {
// Check if it is successful
if(response == 'deleted') {
// Reload page
location.reload();
} else {
alert('error');
console.log(response);
}
}).fail(function(response) {
alert('error 2');
console.log(response);
});
}
});

Как видите, я только что передал идентификатор в качестве параметра.

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

public function cambiarVisible(Request $request, $id)
{
$employee = Worker::findOrFail($id);
$employee->public = ($employee->public == 1) ? 0 : 1;
$employee->save();
}
2

Другие решения

Похоже, что ваша форма имеет ajax, который использует employee/cambiarVisible/{id} как URL. так как id Подстановочный знак должен быть переменной php (не может видеть переменную в JS), он не передается контроллеру.

Попробуйте что-то вроде

var id = {!! json_encode($employee->id) !!};

Затем измените URL как

url:'employee/cambiarVisible/' + id,

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector