1010use Carbon \CarbonImmutable ;
1111use Database \Factories \AnimeFactory ;
1212use Illuminate \Support \Facades \App ;
13- use Illuminate \Support \Facades \Log ;
1413use Jikan \Helper \Constants ;
1514use Jikan \Jikan ;
1615use Jikan \Request \Anime \AnimeRequest ;
@@ -154,25 +153,32 @@ public function filterByRating(\Laravel\Scout\Builder|\Illuminate\Database\Eloqu
154153 /** @noinspection PhpUnused */
155154 public function filterByStartDate (\Laravel \Scout \Builder |\Illuminate \Database \Eloquent \Builder $ query , CarbonImmutable $ value ): \Laravel \Scout \Builder |\Illuminate \Database \Eloquent \Builder
156155 {
157- return $ query
158- -> where ( " aired.from " , " >= " ,
159- $ value
160- -> setTime ( 0 , 0 )
161- -> setTimezone ( new \ DateTimeZone ( ' UTC ' ))
162- -> toAtomString ()
163- ) ;
156+ $ compareVal = $ value -> setTime ( 0 , 0 )-> setTimezone ( new \ DateTimeZone ( ' UTC ' ));
157+ if ( is_scout_query_builder ( $ query )) {
158+ $ query = $ query -> where ( " start_date " , [ " >= " , $ compareVal -> getTimestamp ()]);
159+ } else {
160+ $ query = $ query -> where ( " aired.from " , " >= " , $ compareVal -> toAtomString ());
161+ }
162+ return $ query ;
164163 }
165164
166165 /** @noinspection PhpUnused */
167166 public function filterByEndDate (\Laravel \Scout \Builder |\Illuminate \Database \Eloquent \Builder $ query , CarbonImmutable $ value ): \Laravel \Scout \Builder |\Illuminate \Database \Eloquent \Builder
168167 {
169- return $ query
170- ->where ("aired.to " , "<= " ,
171- $ value
172- ->setTime (0 , 0 )
173- ->setTimezone (new \DateTimeZone ('UTC ' ))
174- ->toAtomString ()
175- );
168+ $ compareVal = $ value ->setTime (0 , 0 )->setTimezone (new \DateTimeZone ('UTC ' ));
169+ if (is_scout_query_builder ($ query )) {
170+ $ query = $ query ->where ("(end_date " , [
171+ "<= " , $ compareVal ->getTimestamp (),
172+ " || end_date:= " , "null " ,
173+ ") "
174+ ]);
175+ } else {
176+ $ query = $ query ->where (function (\Jenssegers \Mongodb \Eloquent \Builder $ query ) use ($ compareVal ) {
177+ return $ query ->where ("aired.to " , "<= " , $ compareVal ->toAtomString ())
178+ ->orWhere ("aired.to " , null );
179+ });
180+ }
181+ return $ query ;
176182 }
177183
178184 public function filterByProducer (\Laravel \Scout \Builder |\Illuminate \Database \Eloquent \Builder $ query , string $ value ): \Laravel \Scout \Builder |\Illuminate \Database \Eloquent \Builder
@@ -182,11 +188,21 @@ public function filterByProducer(\Laravel\Scout\Builder|\Illuminate\Database\Elo
182188 }
183189
184190 $ producer = (int )$ value ;
185- return $ query ->where (function (\Jenssegers \Mongodb \Eloquent \Builder $ query ) use ($ producer ) {
186- return $ query ->where ('producers.mal_id ' , $ producer )
187- ->orWhere ('licensors.mal_id ' , $ producer )
188- ->orWhere ('studios.mal_id ' , $ producer );
189- });
191+ if (is_scout_query_builder ($ query )) {
192+ $ query = $ query ->where ('(producers ' , [
193+ "= " , $ producer ,
194+ " || licensors:= " , $ producer ,
195+ " || studios:= " , $ producer ,
196+ ") "
197+ ]);
198+ } else {
199+ $ query = $ query ->where (function (\Jenssegers \Mongodb \Eloquent \Builder $ query ) use ($ producer ) {
200+ return $ query ->where ('producers.mal_id ' , $ producer )
201+ ->orWhere ('licensors.mal_id ' , $ producer )
202+ ->orWhere ('studios.mal_id ' , $ producer );
203+ });
204+ }
205+ return $ query ;
190206 }
191207
192208 /** @noinspection PhpUnused */
@@ -199,45 +215,74 @@ public function filterByProducers(\Laravel\Scout\Builder|\Illuminate\Database\El
199215 /* @var \Illuminate\Support\Collection $producers */
200216 $ producers = collect (explode (', ' , $ value ))->filter ();
201217
202- return $ query ->where (function (\Jenssegers \Mongodb \Eloquent \Builder $ query ) use ($ producers ) {
203- $ firstProducer = (int )$ producers ->first ();
204- $ query = $ query ->where ('producers.mal_id ' , $ firstProducer )
205- ->orWhere ('licensors.mal_id ' , $ firstProducer )
206- ->orWhere ('studios.mal_id ' , $ firstProducer );
207-
208- foreach ($ producers ->skip (1 ) as $ producer ) {
209- $ producer = (int )$ producer ;
210- $ query = $ query ->orWhere ('producers.mal_id ' , $ producer )
211- ->orWhere ('licensors.mal_id ' , $ producer )
212- ->orWhere ('studios.mal_id ' , $ producer );
213- }
218+ if (is_scout_query_builder ($ query )) {
219+ $ producerFilterList = '[ ' . $ producers ->implode (', ' ) . '] ' ;
220+ $ query = $ query ->where ('(producers ' , [
221+ '= ' , $ producerFilterList ,
222+ ' || licensors:= ' , $ producerFilterList ,
223+ ' || studios:= ' , $ producerFilterList ,
224+ ') '
225+ ]);
226+ } else {
227+ $ query = $ query ->where (function (\Jenssegers \Mongodb \Eloquent \Builder $ query ) use ($ producers ) {
228+ $ firstProducer = (int )$ producers ->first ();
229+ $ query = $ query ->where ('producers.mal_id ' , $ firstProducer )
230+ ->orWhere ('licensors.mal_id ' , $ firstProducer )
231+ ->orWhere ('studios.mal_id ' , $ firstProducer );
232+
233+ foreach ($ producers ->skip (1 ) as $ producer ) {
234+ $ producer = (int )$ producer ;
235+ $ query = $ query ->orWhere ('producers.mal_id ' , $ producer )
236+ ->orWhere ('licensors.mal_id ' , $ producer )
237+ ->orWhere ('studios.mal_id ' , $ producer );
238+ }
239+
240+ return $ query ;
241+ });
242+ }
214243
215- return $ query ;
216- });
244+ return $ query ;
217245 }
218246
219247 /** @noinspection PhpUnused */
220248 public function scopeExceptItemsWithAdultRating (\Laravel \Scout \Builder |\Illuminate \Database \Eloquent \Builder $ query ): \Laravel \Scout \Builder |\Illuminate \Database \Eloquent \Builder
221249 {
222- return $ query
223- ->where ("demographics.mal_id " , "!= " , Constants::GENRE_ANIME_HENTAI )
224- ->where ("demographics.mal_id " , "!= " , Constants::GENRE_ANIME_EROTICA )
225- ->where ("rating " , "!= " , AnimeRatingEnum::rx ()->label )
226- ->where ("genres.mal_id " , "!= " , Constants::GENRE_ANIME_HENTAI );
250+ if (is_scout_query_builder ($ query )) {
251+ $ query = $ query
252+ ->where ("demographics " , ["!= " , Constants::GENRE_ANIME_HENTAI ])
253+ ->where ("demographics " , ["!= " , Constants::GENRE_ANIME_EROTICA ])
254+ ->where ("rating " , ["!= " , AnimeRatingEnum::rx ()->label ])
255+ ->where ("genres " , ["!= " , Constants::GENRE_ANIME_HENTAI ]);
256+ } else {
257+ $ query = $ query
258+ ->where ("demographics.mal_id " , "!= " , Constants::GENRE_ANIME_HENTAI )
259+ ->where ("demographics.mal_id " , "!= " , Constants::GENRE_ANIME_EROTICA )
260+ ->where ("rating " , "!= " , AnimeRatingEnum::rx ()->label )
261+ ->where ("genres.mal_id " , "!= " , Constants::GENRE_ANIME_HENTAI );
262+ }
263+ return $ query ;
227264 }
228265
229266 /** @noinspection PhpUnused */
230267 public function scopeExceptKidsItems (\Laravel \Scout \Builder |\Illuminate \Database \Eloquent \Builder $ query ): \Laravel \Scout \Builder |\Illuminate \Database \Eloquent \Builder
231268 {
232- return $ query
233- ->where ("demographics.mal_id " , "!= " , Constants::GENRE_ANIME_KIDS );
269+ if (is_scout_query_builder ($ query )) {
270+ $ query = $ query ->where ("demographics " , ["!= " , Constants::GENRE_ANIME_KIDS ]);
271+ } else {
272+ $ query = $ query ->where ("demographics.mal_id " , "!= " , Constants::GENRE_ANIME_KIDS );
273+ }
274+ return $ query ;
234275 }
235276
236277 /** @noinspection PhpUnused */
237278 public function scopeOnlyKidsItems (\Laravel \Scout \Builder |\Illuminate \Database \Eloquent \Builder $ query ): \Laravel \Scout \Builder |\Illuminate \Database \Eloquent \Builder
238279 {
239- return $ query
240- ->where ("demographics.mal_id " , Constants::GENRE_ANIME_KIDS );
280+ if (is_scout_query_builder ($ query )) {
281+ $ query = $ query ->where ("demographics " , Constants::GENRE_ANIME_KIDS );
282+ } else {
283+ $ query = $ query ->where ("demographics.mal_id " , Constants::GENRE_ANIME_KIDS );
284+ }
285+ return $ query ;
241286 }
242287
243288 public static function scrape (int $ id )
0 commit comments