为什么这个不起作用??还有什么我需要做的吗???(注:我不想从model
中调用任何boot
方法)。在模型中,它与booted
方法一起工作得很好
// route
Route::get('/tests', function () {
return Test::find(1)->update([
'name' => Str::random(6)
]);
});
// models
namespace App\Models;
use App\Http\Traits\Sortable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Test extends Model
{
use HasFactory;
use Sortable;
protected $guarded = ["id"];
}
// traits
namespace App\Http\Traits;
trait Sortable
{
protected static function bootSort()
{
static::updated(function ($model) {
dd("updated", $model->toArray());
});
static::updating(function ($model) {
dd("updating", $model->toArray());
});
static::saving(function ($model) {
dd("saving", $model->toArray());
});
static::saved(function ($model) {
dd("saved", $model->toArray());
});
}
}
2条答案
按热度按时间jei2mxaa1#
如果我想从trait中激发模型事件,我得到了答案:我必须将 Boot 方法名称设置为带有前缀
boot
的特征类名例如:如果我的特征名称是
Sortable
,则 Boot 方法名称将是bootSortable
以下是该问题的完整解决方案:kxxlusnw2#
你可以使用laravel观测器,它要简单得多