Php 如何仅更新Laravel中的3列值?
我有一个页面模型。它在数据库表中有以下列:Php 如何仅更新Laravel中的3列值?,php,laravel,Php,Laravel,我有一个页面模型。它在数据库表中有以下列: 身份证 名字 电子邮件 密码 地位 特权 usr_prf_颜色 usr_prf_导航 usr_prf_滚动条 我只想更新3列值,它们是usr_prf_color、usr_prf_nav和usr_prf_scroll 这是我的控制器代码: public function themeUpdate(UpdateThemeRequest $request , User $user) { $user->update($request-&
- 身份证
- 名字
- 电子邮件
- 密码
- 地位
- 特权
- usr_prf_颜色
- usr_prf_导航
- usr_prf_滚动条
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>
这是我的模型:
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',
];
}
当我运行这个编码时并没有错误,但数据并没有存储到数据库中。谁能帮我解决这个问题。高级版谢谢。在您的视图中,在隐藏的输入中添加id, 在控制器中添加
User::where('id', $request->input('id'))->update($data);
选中用户中的
$filleble
属性。它应该是一个数组,包含可以批量分配的字段(即通过update()
方法)。@Daniel是正确的,可能您没有将列添加到$fillable-in模型中
User::where('id', $request->input('id'))->update($data);
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'));