belongsTo(User::class, 'uploader_id'); } /** * Relasi ke tabel Category. */ public function category() { return $this->belongsTo(Category::class, 'category_id'); } /** * Relasi ke tabel User untuk likes. */ public function likes() { return $this->belongsToMany(User::class, 'user_video_likes', 'video_id', 'user_id') ->withPivot('status') ->withTimestamps(); } /** * Menghitung jumlah likes dengan status 'active'. * * @return int */ public function getLikesCountAttribute() { return $this->likes()->where('status', 'active')->count(); } public function like(User $user) { $existingLike = $this->likes() ->wherePivot('user_id', $user->id) ->first(); // Log::info('Existing like status: ' . ($existingLike ? $existingLike->pivot->status : 'none')); if ($existingLike) { $newStatus = $existingLike->pivot->status === 'active' ? 'removed' : 'active'; $this->likes()->updateExistingPivot($user->id, ['status' => $newStatus]); // Log::info('Updated status to ' . $newStatus . ' for user_id ' . $user->id); } else { $this->likes()->attach($user->id, ['status' => 'active']); // Log::info('Attached new like with status active for user_id ' . $user->id); } } }