【问题标题】:How to update only 3 column value in Laravel?如何在 Laravel 中只更新 3 列值?
【发布时间】:2020-11-17 03:37:23
【问题描述】:

我有一个页面模型。它在数据库表中有以下列:

  • 身份证
  • 姓名
  • 电子邮件
  • 密码
  • 状态
  • 特权
  • usr_prf_color
  • usr_prf_nav
  • usr_prf_scroll

我只想更新 3 列值,它们是 usr_prf_color、usr_prf_nav 和 usr_prf_scroll。

这是我的控制器代码:

  public function themeUpdate(UpdateThemeRequest $request , User $user)
{
      $user->update($request->all());
      
      $request->usr_prf_color;
      $request->usr_prf_nav;
      $request->usr_prf_scroll;

      $this->validate($request, [

        'usr_prf_color' =>['required'],
        'usr_prf_nav' => ['required'],
        'usr_prf_scroll' => ['required'],

      ]);

    $validatedData = $request->validated();

    $data = $request-> only(['usr_prf_color','usr_prf_nav','usr_prf_scroll']);
 
    $user->update($data);

    $theme = DB::table('users')
                ->select('usr_prf_color','usr_prf_nav','usr_prf_scroll')
                ->where('id', $user->id)
                ->get();

               
    return view('profile.index',compact('theme'));

}

这是我的视图代码:

<form action="{{ route('profile.themeUpdate', auth()->user()->id) }}" method="POST">
                                        @csrf 
                                        @method('PUT')
                                    <div class="row">
                                        <div class="col-md-6">
                                            <div class="form-group">
                                                <label>Color</label>
                                                <select name="usr_prf_color" class="form-control">
                                                    <option value="light">Light</option>
                                                    <option value="dark">Dark</option>
                                                </select>
                                            </div>

                                            <div class="form-group">
                                                <label>Navigation</label>
                                                <select name="usr_prf_nav" class="form-control">
                                                    <option value="horizontal">Horizontal</option>
                                                    <option value="vertical">Vertical</option>
                                                    <option value="hidden">Hidden</option>
                                                </select>
                                            </div>

                                            <div class="form-group">
                                                <label>Scroll</label>
                                                <select name="usr_prf_scroll" class="form-control">
                                                    <option value="scrollable">Scrollable</option>
                                                    <option value="non-scrollable">Non-Scrollable</option>
                                                </select>
                                            </div>

                                        </div>
                                    </div>
                                    <button type='submit' class="btn btn-primary">Update</button>
                                </form>

这是我的路线:

Route::put('profile-theme', 'UserProfileController@themeUpdate')->name('profile.themeUpdate');

这是我的模型:

class User extends Authenticatable

{ 使用通知;

protected $table = 'users';

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'name', 'email', 'status', 'privilege' ,'password', 'usr_prf_color', 'usr_prf_nav', 'usr_prf_scroll',
];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];

/**
 * The attributes that should be cast to native types.
 *
 * @var array
 */
protected $casts = [
    'email_verified_at' => 'datetime',
];

}

运行此编码时没有错误,但数据未存储到数据库中。谁能帮我解决这个问题。提前谢谢你。

【问题讨论】:

  • 检查用户中的$fillable 属性。它应该是一个可以批量分配字段的数组(即通过update() 方法)。
  • @Daniel 是正确的,也许您没有将列添加到模型中的 $fillable

标签: php laravel


【解决方案1】:

在您的视图中,在隐藏的输入中添加 id, 在你的控制器中添加

User::where('id', $request->input('id'))->update($data);

【讨论】:

    【解决方案2】:
    Try following code:It should work.
    $validator = \Validator::make($request->all(),[
        'usr_prf_color' =>'required',
        'usr_prf_nav' => 'required',
        'usr_prf_scroll' => 'required'
    ]);
    
    if ($validator->fails()) {
      return redirect('profile.index')
               ->withErrors($validator)
               ->withInput();
    }
     
    $user = User::where('id', $request->input('id');
    $user->update($request->only(['usr_prf_color','usr_prf_nav','usr_prf_scroll']));
    
    $theme = $user->refresh();
               
    return view('profile.index',compact('theme'));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-04
      • 2019-03-16
      • 2021-10-04
      • 2017-06-10
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      • 2012-06-17
      相关资源
      最近更新 更多