我为产品分类/列表创建了以下内容:
public function index($type_id = null) {
$filters = $sort = array();
if (isset($type_id)) {
$filters['type'] = $type_id;
} else {
$filters['type'] = Input::get('type');
}
$filters['search'] = Input::get('search');
$filters['brand'] = Input::get('brand');
$sort['sort'] = Input::get('sort');
$sort['sortdir'] = Input::get('dir');
$productsPaginated = $this->fetchProducts($filters, $sort);
return View::make('products.products', array(
'productsList' => $productsPaginated
)
);
}
public function fetchProducts($filters, $sorts, $perpage = 2) {
print_r($filters);
$Product = Product::query();
if (!empty($filters['search']))
$Product->where('name', 'LIKE', '%' . $filters['search'] . '%');
if (isset($filters['type']))
$Product->where('type_id', $filters['type']);
if (isset($filters['brand']))
$Product->where('brand_id', $filters['brand']);
if (isset($sorts['sort']))
$Product->orderBy($sorts['sort'], $sorts['sortdir']);
$Product = $Product->paginate($perpage);
return $Product;
}
到目前为止效果很好。
我现在正在尝试创建一些过滤器,以便用户可以进一步过滤结果。
如何根据以下列访问和确定不同的行:
$productsPaginated = $this->fetchProducts($filters, $sort);
?
groupBy
方法不仅存在于查询生成器上,还存在于集合类中。 (调用分页时将返回)
看看 github 上的源代码
因此,向函数添加一个参数并使用groupBy
public function fetchProducts($filters, $sorts, $perpage = 2, $groupBy = null) {
// code omitted for brevity
$Product = $Product->paginate($perpage);
if($groupBy){
$Product = $Product->groupBy($groupBy);
}
return $Product;
}
更新
然后是适用于集合和查询构建器的lists
函数......
$Product->lists('column-name');
更新 2
我很好奇,所以我做了一些测试,发现了一些非常奇怪的东西,我不知道这是一个错误还是我不明白的功能
调用groupBy
时,返回的集合实际上只有一个项目(索引""
),并且该项目包含"原始"项的数组。所以要lists
工作。我找到了这个解决方法
$Product = $Product->groupBy($groupBy);
$Product = new Collection($Product[""]); // 'Illuminate'Support'Collection
$Product = $Product->lists('column-name');