数据未保存在数据库中。 Laravel和Ajax

时间:2018-10-09 01:46:44

标签: php ajax laravel

我遇到了“对我来说新问题”,因为我能够将数据存储在数据库中,但现在我不能。我正在通过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”,但是一旦刷新窗口,该信息就会消失。没有将其存储在数据库中,但之前一直在工作。那是怎么回事?

谢谢。

1 个答案:

答案 0 :(得分:2)

您只用新数据填充了user实例。

$user->fill([
  'os' => $request->os
]);

但尚未保存到数据库。

$user->save();

替代

fill()save()功能组合的替代方式,
您可以使用更新。

$user->update([
    'os' => $request->os
]);