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
相关产品推荐
相关产品推荐

