generateSlugsFrom('title') ->saveSlugsTo('slug') ->usingSeparator('-')->allowDuplicateSlugs(); } /** * @return BelongsTo */ public function user(): BelongsTo { return $this->belongsTo(User::class); } /** * @return HasMany */ public function reactions(): HasMany { return $this->hasMany(WebsiteArticleReaction::class, 'article_id') ->whereActive(true); } /** * @return HasMany */ public function comments(): HasMany { return $this->hasMany(WebsiteArticleComment::class, 'article_id'); } public function userHasReachedArticleCommentLimit(): bool { return $this->comments()->where('user_id', '=', Auth::id())->count() >= (int) setting('max_comment_per_article'); } #[\Override] protected static function boot() { parent::boot(); static::saving(function ($model): void { /** @var WebsiteArticle $model */ if (empty($model->image)) { $model->image = ''; } }); } /** * @return MorphToMany */ public function tags(): MorphToMany { return $this->morphToMany(Tag::class, 'taggable'); } }