我为产品catelog / lister创建了以下内容:
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);
答案 0 :(得分:0)
groupBy
方法不仅存在于查询构建器上,还存在于集合类中。 (调用paginate时会返回)
所以在你的函数中添加一个参数并使用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
function适用于集合以及查询构建器......
$Product->lists('column-name');
我很好奇,所以我做了一些测试,发现了一些非常奇怪的东西,我不知道它是一个错误或一个我不明白的功能
当调用groupBy
时,返回的集合实际上只有一个项目(索引""
),并且此项目包含"原始"的数组。项目。所以让lists
工作。我发现了这个解决方法
$Product = $Product->groupBy($groupBy);
$Product = new Collection($Product[""]); // \Illuminate\Support\Collection
$Product = $Product->lists('column-name');