/** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index(Request $request) { $this->validate($request, ['tag_id' => 'integer|exists:tag,id']); $query = Design::query(); if ($request->has('search')) { $words = explode(" ", $request->input('search')); $query->whereHas('translations', function ($sub_query) use($words) { foreach ($words as $word) { // If it is Chinese, use LIKE. Else, use full text index. // http://www.regular-expressions.info/unicode.html#script if (preg_match('/\\p{Han}+/u', $word)) { $sub_query->where(function ($q) use($word) { $q->where('name', 'like', '%' . $word . '%')->orWhere('content', 'like', '%' . $word . '%'); }); } else { $sub_query->whereRaw('MATCH(name,content) AGAINST(? IN BOOLEAN MODE)', [$word . '*']); } } }); } if ($request->has('tag_id')) { $query->whereHas('tags', function ($sub_query) use($request) { $sub_query->where('id', $request->input('tag_id')); }); } $query->whereNotNull('image_id'); $query->orderBy('created_at', 'desc'); $designs = $query->paginate(12); return view('pages.design.index', ['designs' => $designs]); }