// +---------------------------------------------------------------------- declare (strict_types = 1); namespace addon\articles\service; use addon\articles\model\Article; use addon\articles\model\ArticleFavorite; /** * 收藏服务 */ class FavoriteService { /** * 收藏 / 取消收藏 * * @return array ['favorited' => bool] */ public static function toggle(int $uid, int $articleId): array { if ($uid <= 0 || $articleId <= 0) { return ['favorited' => false]; } // 只能收藏已发布且未删除的文章 $exists = Article::where('id', $articleId)->where('status', 1)->where('delete_at', 0)->count(); if (!$exists) { return ['favorited' => false]; } $record = ArticleFavorite::where('uid', $uid)->where('aid', $articleId)->find(); if ($record) { $record->delete(); return ['favorited' => false]; } ArticleFavorite::create([ 'uid' => $uid, 'aid' => $articleId, 'create_at' => time(), ]); return ['favorited' => true]; } /** * 是否已收藏 */ public static function isFavorited(int $uid, int $articleId): bool { if ($uid <= 0 || $articleId <= 0) { return false; } return (bool) ArticleFavorite::where('uid', $uid)->where('aid', $articleId)->count(); } /** * 我的收藏文章ID(按收藏时间倒序) */ public static function articleIds(int $uid, int $limit = 0): array { if ($uid <= 0) { return []; } $query = ArticleFavorite::where('uid', $uid)->order('id', 'desc'); if ($limit > 0) { $query->limit($limit); } return $query->column('aid'); } }