Laravel 中的 whereHas 查询

kja*_*nko 5 php laravel laravel-5

大家好,

        $filterArray = explode("_", $filters);

        $data['articles'] = \DB::table('products')->join('product_category', function ($q) {
            $q->on('product_category.product_id', '=', 'products.id');
        })->where('product_category.category_id', '=', $id)
            ->select('products.*')
            ->whereBetween('price_retail_1', array($priceFrom, $priceTo))
            ->whereHas('filters', function ($query, $filterArray) {
                $query->whereIn('filter_id', $filterArray);
            })
            ->orderBy('products.' . $sort, $sortOrder)
            ->get();
    }
Run Code Online (Sandbox Code Playgroud)

我有以下查询,并且在 whereHas 方法上遇到一些问题。我收到错误

Unknown column 'has' in 'where clause
Run Code Online (Sandbox Code Playgroud)

最有可能的是因为 $filterArray 变量超出了函数的范围(或者至少这是我的猜测。任何有关如何解决问题的帮助都是值得赞赏的。

Fil*_*ski 6

whereHas您不能在查询生成器上下文中使用方法。该whereHas方法仅适用于来自 Eloquent 模型及其关系的Eloquent查询生成器。

你能做的就是使用joins. 所以你可以这样尝试:

$filterArray = explode("_", $filters);

$data['articles'] = \DB::table('products')->join('product_category', function ($q) {
        $q->on('product_category.product_id', '=', 'products.id');
    })->where('product_category.category_id', '=', $id)
        ->select('products.*')
        ->whereBetween('price_retail_1', array($priceFrom, $priceTo))
        ->join('filters', 'products.filter_id', '=', 'filters.filter_id')
        ->whereIn('filter_id', $filterArray);
        ->orderBy('products.' . $sort, $sortOrder)
        ->get();
Run Code Online (Sandbox Code Playgroud)

我不知道你如何连接这两个表,所以这里只是示例数据:

->join('filters', 'products.filter_id', '=', 'filters.filter_id')
Run Code Online (Sandbox Code Playgroud)