morphToMany(Tag::class, 'taggable'); } public function author() { /* return $this->belongsToMany(User::class, 'blog_post_author', 'blog_post_id', 'user_id'); */ return $this->hasOneThrough(User::class, BlogPostAuthor::class, 'blog_post_id', 'id', 'id', 'user_id'); } public function comments() { return $this->hasMany(BlogPostComment::class); } public function likes(): HasMany { return $this->hasMany(BlogPostLike::class); } public function isLiked(): bool { $curUser = auth()->user(); if ($curUser) { return $curUser->blog_post_likes()->forBlogPost($this)->count(); } return false; } public function removeLike(): bool { $curUser = auth()->user(); if ($curUser) { return $curUser->blog_post_likes()->forBlogPost($this)->delete(); } return false; } public function scopeContainsTag($query, $tagString): Builder { $tagId = Str::of($tagString)->split('/-/')->first(); return Tag::find($tagId)->blogPosts(); } }