public static function fetchAd($position, $start_at, $end_at, $s_id = 0, $c_id = 0, $p_id = 0, $range = 1) { $query = Advertisement::select('advertisements.*')->with(['eventItem'])->where('advertisements.ad_status', '>', 0)->join('event_positions', function ($q) use($position) { $q->on('event_positions.e_id', '=', 'advertisements.e_id')->where('event_positions.position', '=', $position); })->join('event_ranges', function ($q) { $q->on('event_ranges.e_id', '=', 'advertisements.e_id'); }); if ($range == 1) { $query = $query->where('event_ranges.s_id', '=', 0)->where('event_ranges.c_id', '=', 0)->where('event_ranges.p_id', '=', 0); } if ($range == 2) { $query = $query->where(function ($q) use($c_id, $p_id) { $q->where(function ($qq) use($c_id, $p_id) { $qq->where('event_ranges.c_id', '=', $c_id)->where('event_ranges.p_id', '=', $p_id); })->orWhere(function ($qq) { $qq->where('event_ranges.s_id', '=', 0)->where('event_ranges.c_id', '=', 0)->where('event_ranges.p_id', '=', 0); }); }); } if ($range == 3) { $query = $query->where(function ($q) use($s_id) { $q->where(function ($qq) use($s_id) { $qq->where('event_ranges.s_id', '=', $s_id); })->orWhere(function ($qq) { $qq->where('event_ranges.s_id', '=', 0)->where('event_ranges.c_id', '=', 0)->where('event_ranges.p_id', '=', 0); }); }); } $query = $query->join('event_items', function ($q) { $q->on('event_items.e_id', '=', 'advertisements.e_id'); }); if ($start_at) { $query = $query->where('advertisements.created_at', '>', $start_at); } if ($end_at) { $query = $query->where('advertisements.created_at', '<', $end_at); } $now = Tools::getNow(); $query = $query->where('event_items.e_start_at', '<', $now)->where('event_items.e_end_at', '>', $now); $query->orderBy('advertisements.created_at', 'DESC'); $ads = $query->get(); if (count($ads) > 0) { $data = []; foreach ($ads as $key => $ad) { $tmp = $ad->showInList(); $tmp['item_type'] = 2; $data[] = $tmp; } } else { $data = null; } return $data; }