$comments * @property-read int|null $comments_count * @property-read \Illuminate\Database\Eloquent\Collection $likes * @property-read int|null $likes_count * @property-read \Illuminate\Database\Eloquent\Collection $tags * @property-read int|null $tags_count * @property-read \Illuminate\Database\Eloquent\Collection $views * @property-read int|null $views_count * * @method static \Illuminate\Database\Eloquent\Builder|BlogPost containsTag($tagString) * @method static \Database\Factories\BlogPostFactory factory($count = null, $state = []) * @method static \Illuminate\Database\Eloquent\Builder|BlogPost newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|BlogPost newQuery() * @method static \Illuminate\Database\Eloquent\Builder|BlogPost noEagerLoads() * @method static \Illuminate\Database\Eloquent\Builder|BlogPost orderByUniqueViews(string $direction = 'desc', $period = null, ?string $collection = null, string $as = 'unique_views_count') * @method static \Illuminate\Database\Eloquent\Builder|BlogPost orderByViews(string $direction = 'desc', ?\CyrildeWit\EloquentViewable\Support\Period $period = null, ?string $collection = null, bool $unique = false, string $as = 'views_count') * @method static \Illuminate\Database\Eloquent\Builder|BlogPost query() * @method static \Illuminate\Database\Eloquent\Builder|BlogPost whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|BlogPost whereDescription($value) * @method static \Illuminate\Database\Eloquent\Builder|BlogPost whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|BlogPost whereImage($value) * @method static \Illuminate\Database\Eloquent\Builder|BlogPost whereState($value) * @method static \Illuminate\Database\Eloquent\Builder|BlogPost whereTitle($value) * @method static \Illuminate\Database\Eloquent\Builder|BlogPost whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|BlogPost whereYoutubeUrl($value) * @method static \Illuminate\Database\Eloquent\Builder|BlogPost withViewsCount(?\CyrildeWit\EloquentViewable\Support\Period $period = null, ?string $collection = null, bool $unique = false, string $as = 'views_count') * * @mixin \Eloquent */ class BlogPost extends Model implements Viewable { use HasFactory, InteractsWithViews; // protected array $withCount = [ // 'likes', // 'comments', // ]; public static function getWithLikesAndCommentsCount(): Builder { return self::withCount(['likes', 'comments']); } public function tags(): MorphToMany { return $this->morphToMany(Tag::class, 'taggable'); } public function author(): HasOneThrough { return $this ->hasOneThrough(User::class, BlogPostAuthor::class, 'blog_post_id', 'id', 'id', 'user_id') ->withDefault( [ 'name' => 'Guest Author', 'id' => 0, 'profile_photo_url' => 'https://dev2.eatvio.com/storage/profile-photos/mW87tqy9P8O31Dauyvg8f7GowMNMsgt9J6u47T7S.jpg', ] ); } public function comments(): HasMany { return $this->hasMany(BlogPostComment::class); } public function likes(): HasMany { return $this->hasMany(BlogPostLike::class); } public function isLiked(): bool|int { $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 scopeNoEagerLoads(Builder $query): Builder { return $query->setEagerLoads([]); } public function scopeContainsTag(Builder $query, string $tagString): MorphToMany { $tagId = Str::of($tagString)->split('/-/')->first(); return Tag::find($tagId)->blogPosts(); } }