【问题标题】:Update user profile in Laravel 5.1在 Laravel 5.1 中更新用户配置文件
【发布时间】:2016-12-01 08:02:29
【问题描述】:

我正在尝试更新一些用户配置文件数据,如下所示:

在 routes.php 中更新配置文件

Route::get('/profile/update/{id}', [
        'as' => 'user.edit',
        'uses' => 'UserController@edit'
    ]);

在我的 UserController.php 中

public function edit($id)
{
      $user = User::findOrFail($id);

      return view('user/edit', compact('user'));
}

我在 edit.blade.php 中的操作

{!! Form::model($user, ['action' => ['UserController@update', 'id' => $user->id], 'method' => 'PUT']) !!}
                    <div class="form-group">
                        {!! Form::label('name', 'Name') !!}
                        {!! Form::text('name', $user->name, [
                            'class' => 'form-control'
                        ]) !!}
                    </div>

                    <div class="form-group">
                        {!! Form::label('email', 'E-mail') !!}
                        {!! Form::text('email', $user->email, [
                            'class' => 'form-control'
                        ]) !!}
                    </div>

                    <div class="form-group">
                        {!! Form::label('phone', 'Phone') !!}
                        {!! Form::text('phone', $user->phone, [
                            'class' => 'form-control'
                        ]) !!}
                    </div>

                    <p><button type="submit" class="btn btn-primary">Update Profile</button></p>
                {!! Form::close() !!}

更新路线:

Route::put('/profile/update/{id}', [
        'as' => 'user.update',
        'uses' => 'UserController@update'
    ]);

以及UserController.php中的函数

public function update(Request $request, $id)
    {
        $user = User::findOrFail($id);
        $user->update([
            $request->input('name'),
            $request->input('email'),
            $request->input('phone')
        ]);

        return Redirect::route('user.profile');
    }

更新我想要的字段(例如电话)后,它只是返回到配置文件屏幕,但不会在数据库中更新它。我究竟做错了什么?非常感谢您的帮助。

【问题讨论】:

  • 你是否在你的用户模型中填充了这些属性?
  • 是的。默认情况下它是这样的,但我对其进行了修改,使其保持这种状态,结果是一样的。 protected $fillable = ['name', 'email', 'password', 'phone'];
  • 您没有将此值分配给它们正确的列。它必须是$user-&gt;column = 'value';,因为您使用的是模型

标签: php laravel laravel-5.1 blade


【解决方案1】:

我没有看到您正在保存数据。试试这个:

public function update(Request $request, $id)
    {
        $user = User::findOrFail($id);
        $user->name=$request->input('name');
        $user->email=$request->input('email');
        $user->phone=$request->input('phone');

        $user->save();
        return Redirect::route('user.profile');
    }

【讨论】:

  • 是的!就是这样 !为什么 $user->update() 不起作用??
  • @jandro935 因为你使用的是模型
  • @NewbeeDev 感谢您的信息!!
【解决方案2】:

试试这个:键应该是数据库中的字段名称,并确保在模型中将它们设置为$fillable

public function update(Request $request, $id)
    {
        $user = User::findOrFail($id);
        $user->update([
            'name' => $request->name,
            'email' => $request->email,
            'phone' => $request->phone
        ]);

        return Redirect::route('user.profile');
    }

添加用户模型

protected $fillable=['name','email','phone'];

【讨论】:

  • 如果你使用 create 或 update 方法,不要忘记在 User 模型中创建 $fillable 字段。
【解决方案3】:

如果请求具有与您的模型名称相同的参数,您可以这样做:

$user-&gt;update($request-&gt;all());

您要更新的模型属性应在模型中列为可填充

protected $fillable = ['name', 'email'];

【讨论】:

    【解决方案4】:

    您应该更新您的“更新”方法:

    public function update(Request $request, $id) 
    {
        $user = User::findOrFail($id);
        $user->update($request->only(['name', 'email', 'phone']));
    
        return Redirect::route('user.profile');
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-07
      • 2018-09-11
      • 2016-01-09
      • 2017-02-02
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      • 2021-08-01
      • 2022-01-03
      相关资源
      最近更新 更多