LaravelのEloquentモデルのidは通常数値なわけですが、uuidを使いたい!といった場合があると思います。
そういった場合、
$post = new Post();
$post->id = Str::uuid();
...
$post->save();
といった形を取るかもしれないのですが、もっと良い形で書く方法があって、それはイベントを利用する方法です。
class Post extends Model
{
protected static function booted()
{
static::creating(function(Post $model) {
empty($model->id) && $model->id = Str::uuid();
});
}
}
このように書くことによってidをセットしてなくとも作成しようとするときに自動的にuuidが作成されて保存されます。
オブザーバークラスを作る方法もありますが、これくらいであればそのまま書いて良さそうです。
この辺に書いてあります
https://laravel.com/docs/8.x/eloquent#events-using-closures