Laravel 12中Eloquent模型的boot/booted方法未触发问题求助
嘿,我来帮你排查下这个棘手的问题!看了你贴的Fiche模型代码,咱们一步步来分析可能的原因:
首先确认模型创建的方式:
creating这类Eloquent事件只在使用Eloquent自身的创建方法时才会触发。如果你是用DB::table('fiches')->insert(...)这种直接操作数据库的方式,模型的生命周期事件根本不会被触发。你得确保是通过Eloquent API创建实例,比如:// 方式一:使用create方法 Fiche::create([ // 填入你模型允许的字段,比如title、cdp_only等 'title' => '测试创建', 'cdp_only' => false, 'documents' => [], ]); // 方式二:实例化后save $fiche = new Fiche(); $fiche->title = '测试创建'; $fiche->save();检查批量赋值是否正常:你的
$guarded = ['id'];配置看起来没问题,但要确认你传入的字段都不在保护列表里。如果create()因为批量赋值限制没成功创建模型,事件自然也不会触发。如果是这个问题,Laravel通常会抛出MassAssignmentException,你可以看看日志或者控制台有没有报错。排查Trait的干扰:你使用了
MeiliSearchabletrait,有些trait会定义自己的boot方法,如果trait里的boot逻辑没有正确调用父类的方法,可能会覆盖模型的booted逻辑。你可以暂时注释掉trait MeiliSearchable,然后测试事件是否触发——如果触发了,那就是这个trait的问题,需要检查它的boot方法是否正确调用了parent::boot()或者parent::booted()。清除Laravel缓存:有时候类缓存会导致模型的修改不生效,你可以运行以下命令清除缓存:
php artisan clear-compiled php artisan optimize:clear检查命名空间和模型实例:确保你在创建模型时用的是
App\Models\Fiche这个正确的命名空间,别不小心实例化了其他同名模型。
如果以上方法都试过还是不行,建议去storage/logs/laravel.log里看看有没有相关的异常日志——有时候事件没触发是因为有静默异常打断了流程。
内容来源于stack exchange

