我遇到了“对我来说新问题”,因为我能够将数据存储在数据库中,但现在我不能。我正在通过ajax传递一些字段,它运行良好,但现在却不行。
这是我的控制器代码:
public function update_os(Request $request)
{
$this->validate($request, [
'os' => 'required|max:50'
]);
$user = User::find(Auth::id());
$user->fill([
'os' => $request->os
]);
return response()->json($user);
}
现在这是我的Ajax代码:
$(document).on('submit', '#AjaxFormOs', function (event) {
event.preventDefault();
var os = $('#AjaxFormOs').serializeArray();
$.ajax({
method: 'post',
url: userUrl + 'updateos',
data: os,
_token: token,
dataType: 'json'
})
.done(function (operative) {
toastr.info("Your new OS is: " + operative.os + "", 'You have been updated your OS info.', {timeOut: 5000});
$('#os-cancel').addClass('hide');
$('#os').addClass('hide');
$('#user-os').removeClass('hide');
$('.user-info-content').find('#user-os').html(operative.os);
$('#os-edit').removeClass('hide');
});
});
这是路线:
Route::post('/{username}/updateos', 'Account\ProfileController@update_os');
这是表格:
<form id="AjaxFormOs">
{{ csrf_field() }}
<ul class="list-inline p-r-10 user-info-details-form">
<li><strong>OS</strong></li>
<li class="m-l-20 p-b-10" id="user-os">{{ $user->os }}</li>
<li>
<input id="os" type="text" class="form-control hide user-input-field" name="os" value="{{ $user->os }}" autofocus>
<button type="submit" class="hide"></button>
</li>
<li class="pull-right"><a href="#" id="os-edit">Edit</a></li>
<li class="pull-right"><a class="hide" href="#" id="os-cancel">Cancel</a></li>
</ul>
</form>
这是“来自Google chrome开发人员工具”的响应
Request URL: http://centralgeek.test/9/updateos
Status Code: 200 OK
{id: 9, name: "José", last_name: "Martínez", username: "josem",
gender: "Hombre", os: "Ubuntu",…}
about: null
background: "def-background.jpg"
city: "Curicó"
country: "Venezuela"
created_at: "2018-10-09 00:32:45"
deleted_at: null
email: "josem@app.com"
gender: "Hombre"
id: 9
job_title: "¿A qué te dedicas?."
last_login_at: "2018-10-09 00:32:45"
last_login_ip: "127.0.0.1"
last_name: "Martínez"
name: "José"
os: "Ubuntu"
phone_model: null
profilepic: "default.png"
twitter: null
twitter_link: null
updated_at: "2018-10-09 01:21:41"
user_agent: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
username: "josem"
正如您所看到的,我传递的操作系统数据是“ ubuntu”,但是一旦刷新窗口,该信息就会消失。没有将其存储在数据库中,但之前一直在工作。那是怎么回事?
谢谢。
答案 0 :(得分:2)
您只用新数据填充了user
实例。
$user->fill([
'os' => $request->os
]);
但尚未保存到数据库。
$user->save();
替代
此fill()
和save()
功能组合的替代方式,
您可以使用更新。
$user->update([
'os' => $request->os
]);