Laravel + x-editable: 违反完整性约束 1048: 没有数据通过
Laravel + x-editable: Integrity constraint violation 1048: no data passed
使用 x-editable 创建一个可编辑的表单,通过 ajax 发送请求。表格如下所示:
<a href="#" class="editable editable-click" id="mileage"
data-name="mileage"
data-type="number"
data-pk="{{ $car->id }}"
data-original-title="Enter mileage">
{{ $car->mileage }}
</a>
然后是 JS:
$('#mileage').editable({
url: '{{ route('changeMileage', $car->id) }}',
type: 'number',
pk: {{ $car->id }},
name: 'mileage',
title: 'Enter mileage in km',
validate:function(value){
if ($.trim(value) === '') {
return "Field is required";
}
}
})
在我的控制器中:
$car = Car::where('id', $id)->first();
$this->validate($request, [
'value' => 'number|min:' . $car->mileage . '|max:999999',
]);
$car->update([$car->mileage => $request->value]);
控制器代码有点乱,因为我尝试了不同的版本。只是因为我需要验证(输入的里程不能少于现有的里程)。
但问题是,一旦我发送了请求,我就收到了 Integrity constraint violation: 1048
错误,即 mileage
字段为空。 运行 dd($request->value)
给了我 null
,但是监视来自浏览器的请求,它按预期进行:name=mileage&value=325000&pk=1
。
控制器以某种方式缺少 value
值。请问有什么解决办法吗?
P.S。我有意没有检查 pk
值,因为我在当前页面上只有一个要编辑的字段已经有 id
信息。
P.P.S。我尝试了我能想到的所有方法 - dd($request->all())
仍然是 returns 一个空数组 - [].
嗯,就算x-editable弃了,也行。在其他开发人员的帮助下,我想出了这个解决方案。
在我的 JavaScript 代码中,在每个其他选项之后添加以下行:
ajaxOptions: {
dataType: 'json'
},
在此之前,在同一个JS文件中,添加一行来设置ajax headers:
$.ajaxSetup({
headers: {
'Content-Type': 'application/json',
"X-CSRF-Token": "{{ csrf_token() }}",
'X-Requested-With': 'XMLHttpRequest',
'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
});
在 Controller 中添加了检查以查看请求是否通过 ajax:
发送
if($request->ajax()) {
$car->update(['mileage' => $request->input('value')]);
return response()->json(['success' => true]);
}
现在请求如下:name=mileage&value=325002&pk=1
在那之后,它就像一个魅力!
使用 x-editable 创建一个可编辑的表单,通过 ajax 发送请求。表格如下所示:
<a href="#" class="editable editable-click" id="mileage"
data-name="mileage"
data-type="number"
data-pk="{{ $car->id }}"
data-original-title="Enter mileage">
{{ $car->mileage }}
</a>
然后是 JS:
$('#mileage').editable({
url: '{{ route('changeMileage', $car->id) }}',
type: 'number',
pk: {{ $car->id }},
name: 'mileage',
title: 'Enter mileage in km',
validate:function(value){
if ($.trim(value) === '') {
return "Field is required";
}
}
})
在我的控制器中:
$car = Car::where('id', $id)->first();
$this->validate($request, [
'value' => 'number|min:' . $car->mileage . '|max:999999',
]);
$car->update([$car->mileage => $request->value]);
控制器代码有点乱,因为我尝试了不同的版本。只是因为我需要验证(输入的里程不能少于现有的里程)。
但问题是,一旦我发送了请求,我就收到了 Integrity constraint violation: 1048
错误,即 mileage
字段为空。 运行 dd($request->value)
给了我 null
,但是监视来自浏览器的请求,它按预期进行:name=mileage&value=325000&pk=1
。
控制器以某种方式缺少 value
值。请问有什么解决办法吗?
P.S。我有意没有检查 pk
值,因为我在当前页面上只有一个要编辑的字段已经有 id
信息。
P.P.S。我尝试了我能想到的所有方法 - dd($request->all())
仍然是 returns 一个空数组 - [].
嗯,就算x-editable弃了,也行。在其他开发人员的帮助下,我想出了这个解决方案。
在我的 JavaScript 代码中,在每个其他选项之后添加以下行:
ajaxOptions: {
dataType: 'json'
},
在此之前,在同一个JS文件中,添加一行来设置ajax headers:
$.ajaxSetup({
headers: {
'Content-Type': 'application/json',
"X-CSRF-Token": "{{ csrf_token() }}",
'X-Requested-With': 'XMLHttpRequest',
'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
});
在 Controller 中添加了检查以查看请求是否通过 ajax:
发送if($request->ajax()) {
$car->update(['mileage' => $request->input('value')]);
return response()->json(['success' => true]);
}
现在请求如下:name=mileage&value=325002&pk=1
在那之后,它就像一个魅力!