在视图中我有两个foreach
:第一个输出所有类别,第二个输出应该从当前类别输出每个品牌。
示例:
// Controller
$categories = DB::table('products')
->join('categories', 'products.c_id', '=', 'categories.id')
->select('categories.name as cat')
->groupBy('categories.name')
->get();
$brands = DB::table('products')
->join('categories', 'products.c_id', '=', 'categories.id')
->join('brands', 'products.b_id', '=', 'brands.id')
->select('brands.name as brand')
->where('categories.id', '=', '1')<-- the problem part
->groupBy('brands.name')
->get();
//view
@foreach($categories as $category)
<li><a>{{ $category->cat}}</a>
<ul class="sort-section">
<li><a href="#"><strong>All {{$category->cat}}</strong></a></li>
@foreach($brands as $brand)
<li><a href="#">{{ $brand->brand }}</a></li>
@endforeach
</ul>
</li>
@endforeach
我不知道如何正确输出它。现在我正在获取记录where categories.id = 1
(我这样做是为了检查我的代码是否正常工作),而不是1
我应该使用当前的id
category
。换句话说,如果我想让它发生,无论如何,我会在我的视图中首先在foreach
中实现第二个查询(这很疯狂)。
有什么建议吗?
答案 0 :(得分:1)
有两种不同的方法可以解决这个问题。
第一种是更丑陋的方式,但仍然可以解决问题。您可以将其拆分为两个不同的部分。用户首先选择提交发布请求的类别,然后捕获类别ID,然后查询并仅返回与该类别关联的品牌。这会强制页面重新加载。
第二种是更清洁的方式,它使用的是AJAX。使用JQuery使这很容易,这里的答案可以告诉你如何开始: Using AJAX
答案 1 :(得分:1)
您可以只使用一个查询,例如:
//控制器
$getAll = DB::table('categories')
->leftJoin('products', 'products.c_id', '=', 'categories.id')
->leftJoin('brands', 'brands.id', '=', 'products.b_id')
->groupBy('brands.name')
->groupBy('categories.name')
->get([
'categories.id as id',
'categories.name as cat',
'brands.name as brand'
]);
$categories = [];
if (count($getAll)) {
foreach ($getAll as $single) {
if (!isset($categories[$single->id])) {
$categories[$single->id] = new \StdClass();
}
$categories[$single->id]->cat = $single->cat;
$categories[$single->id]->brands[] = $single->brand;
}
}
然后在你看来做这个
@foreach($categories as $category)
<li><a>{{ $category->cat}}</a>
<ul class="sort-section">
<li><a href="#"><strong>All {{$category->cat}}</strong></a></li>
@foreach($category->brands as $brand)
<li><a href="#">{{ $brand }}</a></li>
@endforeach
</ul>
</li>
@endforeach