belongsTo(User::class, 'author_id'); } // رابطه با دسته‌بندی public function category() { return $this->belongsTo(Category::class); } // رابطه با تگ‌ها public function tags() { return $this->belongsToMany(Tag::class)->withTimestamps(); } // پست‌های مرتبط public function relatedPosts() { return $this->belongsToMany(Post::class, 'related_posts', 'post_id', 'related_post_id')->withTimestamps(); } // اسکوپ فیلتر public function scopeFilter($query, $filters) { if (isset($filters['category'])) { $query->whereHas('category', function ($q) use ($filters) { $q->where('slug', $filters['category']); }); } if (isset($filters['tag'])) { $query->whereHas('tags', function ($q) use ($filters) { $q->where('slug', $filters['tag']); }); } if (isset($filters['search'])) { $query->where(function ($q) use ($filters) { $q->where('title', 'like', '%' . $filters['search'] . '%') ->orWhere('body', 'like', '%' . $filters['search'] . '%'); }); } if (isset($filters['author'])) { $query->whereHas('author', function ($q) use ($filters) { $q->where('id', $filters['author']); }); } if (isset($filters['published'])) { $query->whereNotNull('published_at'); } return $query; } /** * Scope برای اعمال مرتب‌سازی */ public function scopeSort($query, $sortField, $sortDirection = 'asc') { // بررسی اینکه فیلد مرتب‌سازی معتبر است یا خیر $allowedSortFields = ['published_at', 'views', 'likes', 'title']; if (in_array($sortField, $allowedSortFields)) { $sortDirection = strtolower($sortDirection) === 'desc' ? 'desc' : 'asc'; $query->orderBy($sortField, $sortDirection); } return $query; } }