【问题标题】:Filter data via ajax request in Laravel在 Laravel 中通过 ajax 请求过滤数据
【发布时间】:2019-03-06 20:23:29
【问题描述】:

这是我在控制器中的功能

public function ajaxResponse (Request $request) {
    if ($request->ajax()) {
        $mat_id = $request->input('mat');
        $cat_id = $request->input('cat');
        $met_id = $request->input('met');
        if ($cat_id != null) {
            $products = Product::whereHas("categories", function ($query) use ($cat_id) {
                $query->whereIn('category_id', explode(',', $cat_id));
            })->get();
        }
        if ($mat_id != null) {
            $products = Product::whereHas("productMaterial", function ($query) use ($mat_id) {
                $query->whereIn('product_material_id', explode(',', $mat_id));
            })->get();
        }

        if ($met_id != null) {
            $products = Product::whereHas("productionMethod", function ($query) use ($met_id) {
                $query->whereIn('production_method_id', explode(',', $met_id));
            })->get();
        }
        if ($cat_id == null && $mat_id == null && $met_id == null) {
            $products = Product::all();
        }
        $prod = view('partials.ajaxProducts', ['products' => $products])->render();
    }
    return response()->json(['prod' => $prod]);
}

所有根据$cat_id$mat_id$met_id过滤的记录 这里的 category 和 productMaterial 与 product 有多对多关系,而 productionMethod 与 product 有一对多的关系 我想结合所有这三种关系通过 ajax 请求过滤数据

【问题讨论】:

    标签: php mysql ajax laravel eloquent


    【解决方案1】:

    你可以使用:

    public function ajaxResponse(Request $request) {
        if ($request->ajax()) {
            $mat_id = $request->input('mat');
            $cat_id = $request->input('cat');
            $met_id = $request->input('met');
    
            $products = Products::query(); 
            if ($cat_id != null) {
                $products = $products->whereHas("categories", function ($query) use ($cat_id) {
                    $query->whereIn('category_id', explode(',', $cat_id));
                });
            }
            if ($mat_id != null) {
                $products = $products->whereHas("productMaterial", function ($query) use ($mat_id) {
                    $query->whereIn('product_material_id', explode(',', $mat_id));
                });
            }
            if ($met_id != null) {
                $products = $products->whereHas("productionMethod", function ($query) use ($met_id) {
                    $query->whereIn('production_method_id', explode(',', $met_id));
                });
            }
    
            $products = $products->get();
    
            $prod = view('partials.ajaxProducts', ['products' => $products])->render();
        }
        return response()->json(['prod' => $prod]);
    }
    

    【讨论】:

    • 消息:“函数 Illuminate\Support\Collection::get() 的参数太少,0 1: {函数:“ajaxResponse”,类:“App\Http\Controllers\FrontEndController”,输入:“->”} 类:“App\Http\Controllers\FrontEndController”函数:“ajaxResponse”类型:“->”我在 xhr 响应中收到此错误
    • @ChandraGhimire 抱歉,我已经更新了代码。现在就来看看吧。
    【解决方案2】:
     public function ajaxResponse(Request $request){
            if ($request->ajax()) {
                $mat_id = $request->input('mat');
                $cat_id = $request->input('cat');
                $met_id = $request->input('met');
    
                $products = Product::query();
                if ($cat_id != null) {
                    $products->whereHas("categories", function ($query) use ($cat_id) {
                        $query->whereIn('category_id', explode(',', $cat_id));
                    })->get();
                }
                if ($mat_id != null) {
                     $products->whereHas("productMaterial", function ($query) use ($mat_id) {
                        $query->whereIn('product_material_id', explode(',', $mat_id));
                    })->get();
                }
                if ($met_id != null) {
                    $products->whereHas("productionMethod", function ($query) use ($met_id) {
                        $query->whereIn('production_method_id', explode(',', $met_id));
                    })->get();
                }
    
                $products = $products->get();
    
                $prod = view('partials.ajaxProducts', ['products' => $products])->render();
            }
            return response()->json(['prod' => $prod]);
        }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 2021-12-03
    相关资源
    最近更新 更多