App\Http\Controllers\ProductsController::searchAll PHP Method

searchAll() public method

[Search products in auto complete fields].
public searchAll ( Illuminate\Http\Request $request ) : [type]
$request Illuminate\Http\Request [Request laravel]
return [type]
    public function searchAll(Request $request)
    {
        $crit = $request->get('crit');
        $suggest = $request->get('suggest');
        $group = $request->get('group');
        $response['products'] = ['results' => null, 'suggestions' => null];
        $crit = str_replace(' ', '%', trim($crit));
        $crit = str_replace('%%', '%', $crit);
        if ($crit != '') {
            if ($suggest) {
                $response['products']['categories'] = Category::select('id', 'name')->search($crit, null, true)->actives()->where('type', 'store')->orderBy('name')->take(3)->get();
            }
            $response['products']['results'] = Product::where(function ($query) use($crit) {
                $query->where('name', 'like', '%' . $crit . '%')->orWhere('description', 'like', '%' . $crit . '%');
            })->select('id', 'name', 'products_group')->actives()->free()->orderBy('rate_val', 'desc');
            if ($group) {
                $response['products']['results']->where(function ($query) use($group) {
                    $query->where('products_group', '<>', $group)->orWhereNull('products_group');
                })->where('id', '<>', $group);
            }
            $response['products']['results'] = $response['products']['results']->take(5)->get();
            $deep = '';
            if ($suggest) {
                $crit = str_replace('%', '', $crit);
                for ($i = 0; $i < strlen($crit); $i++) {
                    $deep .= ' ' . $crit[$i];
                }
            }
            if (!$response['products']['results']->count() && strlen($crit) > 2) {
                $response['products']['results'] = Product::select('id', 'name', 'products_group')->search($deep, null, true)->actives()->free()->orderBy('rate_val', 'desc');
                if ($group) {
                    $response['products']['results']->where(function ($query) use($group) {
                        $query->where('products_group', '<>', $group)->orWhereNull('products_group');
                    })->where('id', '<>', $group);
                }
                $response['products']['results'] = $response['products']['results']->take(5)->get();
            }
            if ($suggest) {
                $response['products']['suggestions'] = self::getSuggestions(['user_id' => \Auth::id(), 'preferences_key' => 'my_searches', 'limit' => 3, 'select' => ['id', 'name', 'features']]);
                if (!$response['products']['categories']->count() && strlen($crit) > 2) {
                    $response['products']['categories'] = Category::select('id', 'name')->search($deep, null, true)->actives()->where('type', 'store')->orderBy('name')->take(3)->get();
                }
            }
        }
        $response['products']['categories_title'] = trans('globals.suggested_categories');
        $response['products']['suggestions_title'] = trans('globals.suggested_products');
        $response['products']['results_title'] = trans('globals.searchResults');
        if ($request->wantsJson()) {
            return json_encode($response);
        } else {
            if (env('APP_DEBUG', false)) {
                dd($response);
            }
        }
    }