You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8插入数据时created_at与updated_at未自动更新问题问询

问题原因

你使用了insert()方法执行插入操作,这个方法属于Laravel的查询构造器,不会触发模型的自动时间戳处理逻辑,只有模型的ORM方法才会自动维护created_at和updated_at字段。

解决方法

方法1:改用模型的create()方法插入数据(最推荐)

该方案完全走模型ORM逻辑,会自动处理时间戳:

  1. 首先需要在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'
    ];
}
  1. 控制器中把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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:24:02