Laravel中如何获取社区名称并渲染到对应信息卡片中
解决社区名称无法在卡片中显示的问题
问题根源
你已经通过分组查询获取了所有社区名称并生成对应数量的卡片,但Blade视图中没有输出具体的社区名称字段,导致卡片里看不到社区名称。
修改方案
1. 基础版:先解决社区名称显示问题
直接在Blade视图的卡片标题位置输出循环项的社区名称字段即可:
<div class="row"> @foreach ($getsocietyname as $item) <div class="col-md-4 col-sm-6 col-lg-3"> <div class="card" style="width: 18rem;"> <div class="card-header"> <strong>{{ $item->society }}</strong> {{-- 替换原固定文本为社区名称 --}} </div> <ul class="list-group list-group-flush"> <li class="list-group-item">Total Customer</li> <li class="list-group-item">Active Customer</li> </ul> </div> </div> @endforeach </div>
2. 进阶版:合并查询,同时获取客户统计数据
你原本单独查询了活跃客户数据,可以合并成一次查询,直接获取每个社区的总客户数和活跃客户数,避免重复查询数据库:
// 一次性获取每个社区的名称、总客户数、活跃客户数 $getsocietyname = DB::table('Customer') ->select( 'society', DB::raw('COUNT(*) as total_customers'), // 统计当前社区总客户数 DB::raw('SUM(CASE WHEN status = "active" THEN 1 ELSE 0 END) as active_customers') // 统计当前社区活跃客户数 ) ->groupBy('society') ->get();
对应的Blade视图可以直接显示统计数据:
<div class="row"> @foreach ($getsocietyname as $item) <div class="col-md-4 col-sm-6 col-lg-3"> <div class="card" style="width: 18rem;"> <div class="card-header"> <strong>{{ $item->society }}</strong> </div> <ul class="list-group list-group-flush"> <li class="list-group-item">Total Customer: {{ $item->total_customers }}</li> <li class="list-group-item">Active Customer: {{ $item->active_customers }}</li> </ul> </div> </div> @endforeach </div>
补充说明
- 原Controller中的
select(DB::raw('society'))可以简化为select('society'),效果一致且代码更简洁。 - 如果使用Eloquent模型(
Customer::),写法和Query Builder兼容,也可以写成Customer::select('society')->groupBy('society')->get()。
内容的提问来源于stack exchange,提问作者Rahul W
相关产品推荐
相关产品推荐

