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

Laravel 5.6中使用updateOrCreate报fillable异常问题求助

解决Laravel 5.6中updateOrCreate的"fillable"异常问题

这个异常其实是Laravel的MassAssignmentException,核心原因是你在updateOrCreate里用到的字段,没有在AppToken模型中声明为允许批量赋值的字段。

具体解决步骤:

  1. 找到你的AppToken模型文件(通常在app/AppToken.php,如果是按规范分目录的结构,可能在app/Models/AppToken.php)
  2. 在模型类中添加$fillable属性,把你需要批量赋值的字段全部列进去——包括updateOrCreate第一个参数里的查询字段(因为创建新记录时这些字段也会被赋值),以及第二个参数里的字段:
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class AppToken extends Model
{
    // 声明允许批量赋值的字段
    protected $fillable = [
        'user_id',
        'token',
        'expiry',
        'created_date'
        // 把你代码里没写完的那个字段(比如mo开头的字段)也补充进来
    ];
}

为什么会出现这个问题?

Laravel默认会保护模型避免批量赋值漏洞,只有在$fillable里明确列出的字段,才能通过create()、update()或者updateOrCreate()这类批量赋值方法进行赋值。你代码里的updateOrCreate在创建新Token时,会把user_id、token、expiry、created_date这些字段一起赋值给模型,只要有一个没在$fillable里,就会抛出这个异常。

可选方案(不推荐生产环境)

如果你想快速测试或者确定所有字段都可以安全赋值,也可以在模型里设置$guarded = [];,表示没有字段被保护,所有字段都允许批量赋值:

protected $guarded = [];

但这种方式在生产环境有安全风险,建议还是明确指定$fillable字段。

内容的提问来源于stack exchange,提问作者Saswat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:57:12