diff --git a/app/common/service/PostFavoriteService.php b/app/common/service/PostFavoriteService.php index 033b8c8..a1dee73 100644 --- a/app/common/service/PostFavoriteService.php +++ b/app/common/service/PostFavoriteService.php @@ -46,7 +46,7 @@ class PostFavoriteService return $this->postProcess(ucfirst($scene), $result); } - public function complexQueryIndex(Request $request) + public function complexQueryIndex1(Request $request) { $param = $request->all(); $limit = (int)$request->get('size', 15); @@ -54,7 +54,6 @@ class PostFavoriteService $query = PostFavorite::with(['post']) ->where('user_id',$request->user->uid) ->whereHas('post', function ($q) use ($param) { - // 固定过滤 status = 1 $q->where('status', 1); // 关键字过滤(如果存在) @@ -62,9 +61,69 @@ class PostFavoriteService $q->where('content', 'like', "%{$param['keyword']}%"); } }); + +// if (empty($param['order'])) { +// $param['order'] = 'desc'; +// } +// if (isset($param['sort_by']) && $param['sort_by'] == 'favorite') { +// $query->orderBy('post.favorite', $param['order']); +// } elseif (isset($param['sort_by']) && $param['sort_by'] == 'browse') { +// $query->orderBy('post.browse', $param['order']); +// } else { +// $query->orderBy('post.id', $param['order']); +// } return $query->paginate($limit, ['*'], 'page', $page); } + public function complexQueryIndex(Request $request) + { + $param = $request->all(); + $size = $param['size'] ?? 10; + $orderField = $param['sort_by'] ?? 'post_favorites.created_at'; // 默认按收藏时间 + $orderType = in_array($param['order'],['desc','asc']) ? $param['order'] :'desc'; // 默认倒序 + var_dump($orderType); + var_dump($request->user->uid); + + // 构建基础查询 + $query = PostFavorite::select('post_favorite.*') // 明确选择主表字段 + ->join('post', 'post_favorite.post_id', '=', 'post.id') // 连接posts表 + ->where('post_favorite.user_id', $request->user->uid) + ->where('post.status', 1); // 固定帖子状态过滤 + + // 关键字过滤 + if (!empty($param['keyword'])) { + $query->where('post.content', 'like', "%{$param['keyword']}%"); + } + + // 动态排序逻辑 + switch ($orderField) { + case 'id': + case 'browse': + case 'created_at': + // 直接使用posts表的字段排序 + $orderBy = 'post.'.$orderField; + break; + case 'post_favorite.created_at': + default: + // 默认使用收藏表的创建时间 + $orderBy = 'post_favorite.created_at'; + break; + } + $query->orderBy($orderBy, $orderType); + +// 执行分页查询 + + $paginator = $query->paginate($size); + +// 由于使用了join,需要重新手动加载关联的post数据 + $paginator->getCollection()->transform(function ($item) { + $item->post = Post::find($item->post_id); // 或者用 Post::select(...)->find() + return $item; + }); + + return $paginator->items(); + } + /** * 构造 CrudUtil 查询配置 */ diff --git a/app/common/service/PostService.php b/app/common/service/PostService.php index e3db7a4..f278fa9 100644 --- a/app/common/service/PostService.php +++ b/app/common/service/PostService.php @@ -73,12 +73,15 @@ class PostService $config['where']['status'] = 1; $config['order']['sort'] = 'desc'; - if (isset($p['order']) && $p['order'] == 'favorite') { - $config['order']['favorite'] = 'desc'; - } elseif (isset($p['order']) && $p['order'] == 'browse') { - $config['order']['browse'] = 'desc'; + if (empty($p['order'])) { + $p['order']='desc'; + } + if (isset($p['sort_by']) && $p['sort_by'] == 'favorite') { + $config['order']['favorite'] = $p['order']; + } elseif (isset($p['sort_by']) && $p['sort_by'] == 'browse') { + $config['order']['browse'] = $p['order']; } else { - $config['order']['id'] = 'desc'; + $config['order']['id'] = $p['order']; } break; case 'show':