大家好,
$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();
}
我有以下查询,我在whereHas方法上遇到了一些问题。我收到了错误
Unknown column 'has' in 'where clause
很可能是因为$ filterArray变量超出了该函数的范围(或者至少这是我猜的。对于如何解决该问题的任何帮助都表示赞赏。
答案 0 :(得分:3)
您不能在查询生成器上下文中使用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();
我不知道如何连接这两个表,所以这里只是示例数据:
->join('filters', 'products.filter_id', '=', 'filters.filter_id')