如何在Laravel中更新数据

时间:2019-01-13 19:25:17

标签: laravel eloquent frameworks

我无法使用laravel更新数据库中的记录。我希望用户能够通过填写表格来更改其名称/电子邮件地址。但是,这不起作用。它给我这个错误“从空值创建默认对象”,我不知道我在做什么错。我希望有人可以帮助我解决这个问题。

我的控制器中的更新功能:

public function update(Request $request, $id)
{
    $user = UserModel::find($id);

    $name->name = $request->input('name');
    $email->email = $request->input('email');

    $user->save();

    return view('edit');
}

我认为自己的表单:

 <form id="form" action="{{ action('AccountController@update') }}">
    @csrf
        <div class="form-group">
            <h5>Edit Acount info</h5>
            <label for="">Name:</label><input name="name" type="text" value="{{ Auth::user()->name }}" class="form-control" id="edit_name">
            <label for="">E-mail:</label><input name="email" type="text" value="{{ Auth::user()->email }}" class="form-control" id="edit_email">
            <button type="submit" class="btn btn-primary"><a id="btn_link">Edit</a></button>
        </div>
 </form>

我的模特:

 class UserModel extends Model
 {
   protected $table = 'users';
   protected $primarykey = 'id';
   protected $fillable = ['name', 'email'];
 }   

enter image description here

2 个答案:

答案 0 :(得分:2)

您正在尝试为对象nameemail分配一个值。两者都不存在。您可能打算这样做:

public function update(Request $request)
{
    auth()->user()->update([
        'name'  => $request->input('name'),
        'email' => $request->input('email')
    ]);

    return view('edit');
}

编辑:诚然,看到GET正在执行更新操作是很奇怪的。我将其更改为POST。还更改了操作以使用命名路由。如果愿意,可以保留动作助手。

<form id="form" action="{{ route('account.update') }}" method="POST">
    @csrf
        <div class="form-group">
            <h5>Edit Account info</h5>
            <label for="">Name:</label><input name="name" type="text" value="{{ auth()->user()->name }}" class="form-control" id="edit_name">
            <label for="">E-mail:</label><input name="email" type="text" value="{{ auth()->user()->email }}" class="form-control" id="edit_email">
            <button type="submit" class="btn btn-primary"><a id="btn_link">Edit</a></button>
        </div>
 </form>

请确保您的路由也已更改为POST路由。

Route::post('account/update', 'AccountController@update')->name('account.update');

不确定以上是否是您的实际路线,但是您可以轻松地更改:)

答案 1 :(得分:0)

看看您的错误,它应该可以工作:

public function update(Request $request, $id)
{
    $user = UserModel::find($id);

    $user->name = $request->input('name');
    $user->email = $request->input('email');

    $user->save();

    return view('edit');
}

这也是一种方式:

public function update(Request $request, $id)
{
    $user = UserModel::find($id);

    $user->update([
        'name' => $request->input('name'),
        'email' => $request->input('email')
    ]);

    return view('edit');
}