laravel中比較常規的列表查詢:
/** * 活動列表 * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function getActiveList(Request $request,UrlManager $urlManager) { $name = $request->get('name'); //活動標題 $start_time = $request->get('start_time'); //活動開始時間 $author_user_name = $request->get('author_user_name'); //活動發布者 $active_classify_id = $request->get('active_classify_id'); //活動分類 $limit = (int) $request->get('limit', 15); $offset = (int) $request->get('offset', 0); $query = ActiveContent::with(['user']) ->when($active_classify_id, function ($query) use ($active_classify_id) { $query->where('active_classify_id', $active_classify_id); }) ->when($name, function ($query) use ($name) { $query->where('name', 'like', sprintf('%%%s%%', $name)); }) ->when($start_time, function ($query) use ($start_time) { $query->where('created_at', '>=', $start_time); }) ->when($author_user_name, function ($query) use ($author_user_name) { return $query->whereHas('user', function ($query) use ($author_user_name) { return $query->where('name', 'like', '%'.$author_user_name.'%'); }); }); $total = $query->count('id'); $items = $query->limit($limit) ->offset($offset) ->orderBy('weight', 'desc') ->orderBy('id', 'desc') ->paginate()->toArray(); foreach($items['data'] as $key=>$value){ //獲取活動封面 $active_face = ActiveContent::with('faces')->where('id', $value['id']) ->select('face', 'id')->get()->keyBy('id'); $items['data'][$key]['face']=(isset($active_face[$value['id']]) && $active_face[$value['id']]->faces) ? $urlManager->make($active_face[$value['id']]->faces->file) : ''; } return response()->json($items, 200, ['x-ad-total' => $total]); }