Laravel Livewire使用Eloquent时表单输入值存入数据库为空问题
问题排查方案
检查Absence模型的批量赋值权限
Eloquent的create方法受批量赋值保护机制限制,必须确保reason字段被包含在模型的$fillable数组中:class Absence extends Model { protected $fillable = ['reason', /* 其他允许批量赋值的字段 */]; // 或者设置 $guarded = []; 允许所有字段批量赋值(生产环境不推荐) }如果
reason不在$fillable列表内,create方法会自动忽略该字段的赋值,导致存入null;而直接写入字符串的方式不受批量赋值规则约束,因此能正常存入数据。确认Livewire属性绑定与提交逻辑
虽然单独执行dd($this->reason_add)能获取到值,但可以再核对以下细节:- 表单输入框的
wire:model是否准确绑定到reason_add,例如:<input type="text" wire:model="reason_add"> - 提交动作(如
wire:click="submitForm")是否在属性更新后触发,排查是否存在提交前意外重置reason_add值的代码
- 表单输入框的
排查模型事件/观察者的干扰
检查Absence模型是否注册了creating、saving等事件回调或观察者,确认这些逻辑中是否存在将reason字段重置为null的代码:protected static function boot() { parent::boot(); static::creating(function ($absence) { // 检查是否有类似 $absence->reason = null; 的逻辑 }); }验证数据库字段配置
确认数据库中reason字段的类型(如是否为varchar)、是否允许null值。虽然手动写入'test'正常,但字段类型不匹配也可能导致赋值异常。
内容的提问来源于stack exchange,提问作者jynxy
相关产品推荐
相关产品推荐

