Browse Source

260311 最新消息修改前後篇的顯示條件

OMEGA\lulufj.ho 3 weeks ago
parent
commit
85b4445868
1 changed files with 33 additions and 14 deletions
  1. 33
    14
      app/Http/Controllers/Api/NewsController.php

+ 33
- 14
app/Http/Controllers/Api/NewsController.php View File

@@ -128,8 +128,8 @@ class NewsController extends Controller
128 128
     public function detail(Request $request, $locale = 'tw', $id){
129 129
 
130 130
         $isPreview = $request->input("preview","");
131
-        $now = now();
132
-
131
+        $now = Carbon::now(); 
132
+        
133 133
         if($isPreview){
134 134
             $news = News::where('id', $id)
135 135
                 ->first();
@@ -156,34 +156,53 @@ class NewsController extends Controller
156 156
         }
157 157
 // dd($news);
158 158
         //取得前一篇
159
-        $previous = News::where(function ($query) use ($news) {
159
+        $previous = News::where(function ($query) use ($news, $now) {
160 160
             $query->where('order', $news->order)
161 161
             ->where('post_date', $news->post_date)
162
-            ->where('id', '>', $news->id);
162
+            ->where('id', '>', $news->id)
163
+            ->where("visible", 1)
164
+            ->where(fn($q) => $q->whereNull('start_date')->orWhere('start_date', '<=', $now))
165
+            ->where(fn($q) => $q->whereNull('end_date')->orWhere('end_date', '>=', $now));
163 166
         })
164
-        ->orWhere(function ($query) use ($news) {
167
+        ->orWhere(function ($query) use ($news, $now) {
165 168
             $query->where('order', $news->order)
166
-            ->where('post_date', '>', $news->post_date);
169
+            ->where('post_date', '>', $news->post_date)
170
+            ->where("visible", 1)
171
+            ->where(fn($q) => $q->whereNull('start_date')->orWhere('start_date', '<=', $now))
172
+            ->where(fn($q) => $q->whereNull('end_date')->orWhere('end_date', '>=', $now));
167 173
         })
168
-        ->orWhere(function ($query) use ($news) {
169
-            $query->where('order', '>', $news->order);
174
+        ->orWhere(function ($query) use ($news, $now) {
175
+            $query->where('order', '>', $news->order)
176
+            ->where("visible", 1)
177
+            ->where(fn($q) => $q->whereNull('start_date')->orWhere('start_date', '<=', $now))
178
+            ->where(fn($q) => $q->whereNull('end_date')->orWhere('end_date', '>=', $now));
170 179
         })
171 180
         ->orderBy('order', 'asc')
172 181
         ->orderBy('post_date', 'asc')
173 182
         ->orderBy('id', 'asc')
174 183
         ->first();
184
+
175 185
         //取得下一篇
176
-        $next = News::where(function ($query) use ($news) {
186
+        $next = News::where(function ($query) use ($news, $now) {
177 187
             $query->where('order', $news->order)
178 188
             ->where('post_date', $news->post_date)
179
-            ->where('id', '<', $news->id);
189
+            ->where('id', '<', $news->id)
190
+            ->where("visible", 1)
191
+            ->where(fn($q) => $q->whereNull('start_date')->orWhere('start_date', '<=', $now))
192
+            ->where(fn($q) => $q->whereNull('end_date')->orWhere('end_date', '>=', $now));
180 193
         })
181
-        ->orWhere(function ($query) use ($news) {
194
+        ->orWhere(function ($query) use ($news, $now) {
182 195
             $query->where('order', $news->order)
183
-            ->where('post_date', '<', $news->post_date);
196
+            ->where('post_date', '<', $news->post_date)
197
+            ->where("visible", 1)
198
+            ->where(fn($q) => $q->whereNull('start_date')->orWhere('start_date', '<=', $now))
199
+            ->where(fn($q) => $q->whereNull('end_date')->orWhere('end_date', '>=', $now));
184 200
         })
185
-        ->orWhere(function ($query) use ($news) {
186
-            $query->where('order', '<', $news->order);
201
+        ->orWhere(function ($query) use ($news, $now) {
202
+            $query->where('order', '<', $news->order)
203
+            ->where("visible", 1)
204
+            ->where(fn($q) => $q->whereNull('start_date')->orWhere('start_date', '<=', $now))
205
+            ->where(fn($q) => $q->whereNull('end_date')->orWhere('end_date', '>=', $now));
187 206
         })
188 207
         ->orderBy('order', 'desc')
189 208
         ->orderBy('post_date', 'desc')