slug) { $model->slug = static::generateUniqueSlug($model->title); } }); static::updating(function ($model) { $protectedSlugs = ['standard', 'reduced', 'zero']; if ($model->isDirty('title') && !in_array($model->getOriginal('slug'), $protectedSlugs, true)) { $model->slug = static::generateUniqueSlug($model->title, $model->id); } }); } protected static function generateUniqueSlug($title, $ignoreId = null) { $base = Str::slug($title); if (!$base) { $base = 'tax-class'; } $slug = $base; $suffix = 2; while (static::query() ->when($ignoreId, function ($q) use ($ignoreId) { $q->where('id', '!=', $ignoreId); }) ->where('slug', $slug) ->exists()) { $slug = $base . '-' . $suffix; $suffix++; } return $slug; } public function setMetaAttribute($value) { if ($value) { $decoded = \json_encode($value, true); if (!($decoded)) { $decoded = '[]'; } } else { $decoded = '[]'; } $this->attributes['meta'] = $decoded; } public function getMetaAttribute($value) { if (!$value) { return []; } return \json_decode($value, true); } }