Laravel实现点击按钮更新pins表pin_date字段为当前时间
解决Pin记录pin_date字段更新问题
你目前的代码只是查询到了对应的Pin记录,但没有给pin_date字段设置值,所以调用save()时不会对数据库做任何更新。下面是具体的修复方案:
方案一:通过模型实例更新(直观易读)
修改控制器中的pinDate方法,在保存前为pin_date赋值当前日期时间:
public function pinDate($id) { // 使用findOrFail替代find,避免找不到记录时出现空对象错误 $pin = Pin::findOrFail($id); // 用Laravel的now()助手函数获取当前符合格式的日期时间 $pin->pin_date = now(); $pin->save(); // 可选:添加响应反馈,比如返回原页面并提示成功 return back()->with('success', 'Pin日期已成功更新'); }
方案二:直接通过查询构造器更新(更高效)
如果不需要操作模型的其他逻辑,可以直接用update方法完成,不需要实例化模型:
public function pinDate($id) { Pin::where('id', $id)->update(['pin_date' => now()]); return back()->with('success', 'Pin日期已成功更新'); }
额外注意:确保前端表单携带CSRF令牌
因为你的路由是POST类型,Laravel默认启用CSRF保护,所以前端的表单必须包含CSRF令牌,否则会返回419错误。示例Blade表单代码:
<form action="{{ route('pins.pin-date', ['id' => $pin->id]) }}" method="POST"> @csrf <button type="submit">更新Pin日期</button> </form>
(也可以直接写URL路径,但给路由加个名字会更便于维护:Route::post('/pins/pin-date/{id}', 'PinsController@pinDate')->name('pins.pin-date');)
这样修改后,点击按钮就能成功把对应记录的pin_date字段更新为当前日期时间了。
内容的提问来源于stack exchange,提问作者L. Fox
相关产品推荐
相关产品推荐

