Laravel:如何通过关系过滤雄辩数据

时间:2014-12-01 12:15:40

标签: magento laravel eloquent layered-navigation

我正在laravel中构建产品目录,我想根据产品属性过滤产品。

我有2张桌子,产品&属性。属性具有键,值和product_id。例如:

product_id - key   - value
12         - brand - BestBrandEver
23         - brand - EvenBetterBrand

现在,我希望能够通过类别页面上的表单过滤我的产品,该表单传递查询字符串参数,例如“brand = BestBrandEver或brand = EvenBetterBrand”,并仅检索该品牌的产品。最终我想对颜色,材质等做同样的事情......这很像Magento或Woocommerce分层导航。

我现在已经停留了一段时间,因为我不知道如何以正确的方式开始构建。是否有人可以帮我解决这个问题,或者能指出正确的方向(甚至是教程或视频)?

提前致谢!

1 个答案:

答案 0 :(得分:5)

假设这样的网址:

/products?filters[brand][]=a&filters[brand][]=b&filters[color][]=a&filters[color][]=b

依此类推......


使用whereHas方法按产品属性限制产品:

Product::whereHas('attributes', function ($query) {
    foreach (Input::get('filters') as $key => $values) {
        $query->orWhere(function($query) use ($key, $values) {
            $query->where('key', $key)->whereIn('value', $values);
        });
    }
});