Laravel 8插入数据时created_at与updated_at未自动更新问题问询
问题原因
你使用了insert()方法执行插入操作,这个方法属于Laravel的查询构造器,不会触发模型的自动时间戳处理逻辑,只有模型的ORM方法才会自动维护created_at和updated_at字段。
解决方法
方法1:改用模型的create()方法插入数据(最推荐)
该方案完全走模型ORM逻辑,会自动处理时间戳:
- 首先需要在User模型中设置
$fillable属性,开放允许批量赋值的字段:
<?php namespace App\Models\Backend\MySQL; use Illuminate\Database\Eloquent\Model; class User extends Model { protected $table = 'user'; // 新增允许批量赋值的字段 protected $fillable = [ 'name', 'created_by', 'created_by_user' ]; }
- 控制器中把
insert()改成create():
use App\Models\Backend\MySQL\User; public function store(Request $request) { $data = [ 'name' => !empty($request->name) ? $request->name : 'Jony', 'created_by' => auth()->user()->id, 'created_by_user' => auth()->user()->name, ]; User::create($data); }
方法2:手动添加时间戳字段
如果坚持使用insert()方法,可以手动传入两个时间戳的值:
public function store(Request $request) { $data = [ 'name' => !empty($request->name) ? $request->name : 'Jony', 'created_by' => auth()->user()->id, 'created_by_user' => auth()->user()->name, 'created_at' => now(), 'updated_at' => now() ]; User::insert($data); }
方法3:使用save()方法创建实例
先实例化模型对象,赋值后调用save()方法,也会自动处理时间戳:
public function store(Request $request) { $user = new User(); $user->name = !empty($request->name) ? $request->name : 'Jony'; $user->created_by = auth()->user()->id; $user->created_by_user = auth()->user()->name; $user->save(); }
注意:你当前控制器中引入的User模型命名空间与实际模型的命名空间不匹配,需要将引入语句改为
use App\Models\Backend\MySQL\User;,否则会抛出类找不到的错误。
内容的提问来源于stack exchange,提问作者Miedkes
相关产品推荐
相关产品推荐

