Laravel 5.8 Blade模板中如何统计每个商品对应的bid_offers竞价数量
实现方案
方案1:Blade模板直接使用集合where计数(符合你当前代码结构的要求)
你已经将全量bid_offers集合传递到视图,Laravel集合原生支持where过滤方法,直接替换模板中对应的统计位置代码即可:
找到模板里的
<span class="ml-auto">count the bids on this product?</span>
替换为:
<span class="ml-auto">{{ $bid_offers->where('bid_id', $bid->id)->count() }} 条报价</span>
原理是通过集合的where方法筛选出和当前竞价活动id匹配的所有报价记录,再调用count方法统计数量。
方案2:Eloquent关联预加载统计(更推荐,性能更优)
你当前的实现需要查询全量报价表,数据量大时性能损耗很高,Laravel内置的关联统计功能可以更优雅的解决该问题,且完全兼容Laravel 5.8版本:
- 首先在
Bid模型中定义和报价表的一对多关联:
// app/Bid.php public function bidOffers() { return $this->hasMany(BidOffer::class, 'bid_id'); }
- 修改控制器查询代码,使用
withCount预统计每个竞价活动的报价数,不需要再查询全量报价表:
public function show_index() { $bids = Bid::withCount('bidOffers') ->inRandomOrder() ->limit(8) ->get(); return view('user_views_auction/index', compact('bids')); }
- Blade模板中直接调用自动生成的统计属性即可:
<span class="ml-auto">{{ $bid->bid_offers_count }} 条报价</span>
该方案查询效率比前端过滤高很多,适合生产环境使用。
内容的提问来源于stack exchange,提问作者Usama Arif
相关产品推荐
相关产品推荐

