|
@@ -5690,4 +5690,66 @@ class NewsService implements NewsServiceInterface
|
|
|
}
|
|
|
return Result::success($result);
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 农网导航首页数据
|
|
|
+ */
|
|
|
+ public function getWebsiteNwHomeList(array $data): array{
|
|
|
+ $categoryIds = WebsiteCategory::where(['website_id'=> $data['website_id']])->where("pid","!=",0)
|
|
|
+ ->pluck('category_id')
|
|
|
+ ->toArray();
|
|
|
+ // 使用子查询优化
|
|
|
+ $articlesList = DB::table('article')
|
|
|
+ ->select([
|
|
|
+ 'article.id',
|
|
|
+ 'article.title',
|
|
|
+ 'article.imgurl',
|
|
|
+ 'article.created_at',
|
|
|
+ 'category.name as category_name',
|
|
|
+ 'category.id as category_id',
|
|
|
+ 'website_category.aLIas_pinyin as pinyin',
|
|
|
+ DB::raw('100 as type')
|
|
|
+ ])
|
|
|
+ ->join('category', 'article.catid', '=', 'category.id')
|
|
|
+ ->leftJoin('website_category', 'website_category.category_id', '=', 'category.id')
|
|
|
+ ->where('website_category.website_id', $data['website_id'])
|
|
|
+ ->where('article.status', 1)
|
|
|
+ ->whereIn('category.id', $categoryIds)
|
|
|
+ // ->whereRaw('article.created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)')
|
|
|
+ ->orderBy('article.created_at', 'desc')
|
|
|
+ ->get()
|
|
|
+ ->groupBy('category_id')
|
|
|
+ ->map(function ($group) {
|
|
|
+ // 确保第一条数据有图片
|
|
|
+ $firstWithImage = $group->first(function ($item) {
|
|
|
+ return !empty($item->imgurl);
|
|
|
+ });
|
|
|
+
|
|
|
+ if ($firstWithImage) {
|
|
|
+ // 如果有带图片的文章,将其放在第一位
|
|
|
+ $group = $group->filter(function ($item) use ($firstWithImage) {
|
|
|
+ return $item->id !== $firstWithImage->id;
|
|
|
+ })->prepend($firstWithImage);
|
|
|
+ }
|
|
|
+
|
|
|
+ return [
|
|
|
+ 'category_name' => $group->first()->category_name,
|
|
|
+ 'catid' => $group->first()->category_id,
|
|
|
+ 'pinyin' => $group->first()->pinyin,
|
|
|
+// 'type' => 100,
|
|
|
+ 'list' => $group->take(4)->map(function ($item) {
|
|
|
+ return [
|
|
|
+ 'id' => $item->id,
|
|
|
+ 'title' => $item->title,
|
|
|
+// 'imgurl' => $item->imgurl,
|
|
|
+// 'created_at' => $item->created_at
|
|
|
+ ];
|
|
|
+ })->values()
|
|
|
+ ];
|
|
|
+ })
|
|
|
+ ->values()
|
|
|
+ ->toArray();
|
|
|
+ return Result::success($articlesList);
|
|
|
+ }
|
|
|
}
|