public function index(Request $request) { $scope = []; if ($request->has('title')) { $scope['fts.title'] = ['LIKE', '%' . $request->input('title') . '%']; } if ($request->has('host')) { $scope['fts.host'] = ['LIKE', '%' . $request->input('host') . '%']; } if ($request->has('staff')) { $scope['staff'] = ['LIKE', '%' . $request->input('staff') . '%']; } if ($request->has('startdate') || $request->has('enddate')) { if (!$request->has('startdate')) { $scope['release_date'] = ['<=', $request->input('enddate')]; } else { if (!$request->has('enddate')) { $scope['release_date'] = ['>=', $request->input('startdate')]; } else { $release_date = [$request->input('startdate'), $request->input('enddate')]; } } } $params = $request->except('page'); if ($request->has('sort')) { $params['sort'] = $request->input('sort'); } else { $params['sort'] = 'id'; } if ($request->has('order')) { $params['order'] = $request->input('order'); } else { $params['order'] = 'desc'; } if (isset($release_date)) { $fteps = Ftep::whereBetween('release_date', $release_date)->join('fts', function ($join) use($scope) { $join->on('fteps.ft_id', '=', 'fts.id'); foreach ($scope as $key => $value) { $join = $join->where($key, $value[0], $value[1]); } })->select('fteps.*', 'fts.id as ft_id', 'fts.title as ft_title', 'fts.host as host')->orderBy('fteps.' . $params['sort'], $params['order'])->paginate(20); } else { $fteps = Ftep::join('fts', function ($join) use($scope) { $join->on('fteps.ft_id', '=', 'fts.id'); foreach ($scope as $key => $value) { $join = $join->where($key, $value[0], $value[1]); } })->select('fteps.*', 'fts.id as ft_id', 'fts.title as ft_title', 'fts.host as host')->orderBy('fteps.' . $params['sort'], $params['order'])->paginate(20); } return view('ftep.index', ['params' => $params, 'fteps' => $fteps]); }