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

Laravel 5.5中MySQL字段默认值无法被手动修改问题咨询

问题解决方案:Laravel 5.5中User::create()无法修改level字段值

这个问题我之前也碰到过,核心原因是Laravel的批量赋值保护机制在起作用,咱们一步步解决:

问题根源

Laravel的Eloquent模型默认会限制批量赋值操作(比如create()、update()这类一次性传入多个字段的方法),只有在模型的$fillable属性中明确列出的字段,才能被批量赋值。如果你的User模型里没有把level加入$fillable,那么执行User::create()时,level字段会被自动忽略,数据库就会使用迁移中设置的默认值user。

解决方案

修改你的User模型,将level字段添加到$fillable数组中:

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * 允许批量赋值的字段
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password', 'level', // 新增level字段
    ];

    // 模型其他代码...
}

验证修改

修改完成后,重新执行你的创建代码:

User::create([
    'level' => 'admin',
    'name' => 'emad',
    'email' => 'emad@gmail.com',
    'password' => bcrypt('your-password'),
]);

此时数据库中的level字段就会正确存储为admin了。

额外提示

如果你不想逐个添加字段,可以设置$guarded = [];来允许所有字段批量赋值,但这种做法在生产环境存在安全风险(可能导致恶意字段被注入),所以更推荐使用$fillable精确控制允许赋值的字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:07:04