oldSlugable, $model->oldSlugable->slug ?? ''); }); static::created(function (self $model) { $className = (new \ReflectionClass($model->oldSlugable))->getShortName(); session()->flash('info', trans( 'Le slug [:className -> \':oldSlug\'] redirige maintenant vers [:className -> \':newSlug\']', [ 'className' => $className, 'oldSlug' => $model->slug, 'newSlug' => $model->oldSlugable->slug ] )); }); } // * RELATIONSHIPS /** * morphTo product or range * * @return \Illuminate\Database\Eloquent\Relations\morphTo */ public function oldSlugable() { return $this->morphTo(); } // * METHODS /** * Insert an oldSlug * * @param \Illuminate\Database\Eloquent\Model $model * @return void * @phpcs:ignore Squiz.Commenting.FunctionComment.EmptyThrows * @throws \Illuminate\Database\ClassMorphViolationException */ public static function insertSlug(Model $model) { if ($model->getOriginal('slug') === $model->slug) { return; } $oldSlugable = new self([ 'slug' => $model->getOriginal('slug') ]); $oldSlugable->oldSlugable()->associate($model); $oldSlugable->saveOrFail(); } /** * Remove old slugs that are duplicated * * @param \Illuminate\Database\Eloquent\Model $model * @param string $slug * @return void */ public static function removeSameSlugs(Model $model, string $slug) { // * Remove Old of class type self::query() ->where('slug', $slug) ->where('old_slugable_type', \get_class($model)) ->delete(); } }