Laravel 8如何筛选展示数据库中符合特定字段值的所有文章
解决方案
Laravel中数据筛选的最佳实践是在控制器查询阶段完成条件过滤,既符合MVC分层逻辑,也能避免查询冗余数据导致性能浪费,具体修改方法如下:
方法1:控制器直接加筛选条件(推荐)
找到你向Blade视图传递$donations变量的控制器方法,将原本的全量查询代码:
$donations = Donation::all();
修改为带where条件的查询,直接从数据库层面过滤出未预留的条目:
$donations = Donation::where('is_reserved', 0)->get();
修改完成后不需要改动现有Blade代码,循环渲染的就只有is_reserved = 0的符合要求的条目。
方法2:模型添加本地作用域(适合多场景复用)
如果「查询未预留条目」的逻辑会在多个页面/接口用到,可以给Donation模型添加本地作用域实现代码复用:
- 打开
app/Models/Donation.php文件,在模型类中添加如下方法:
public function scopeNotReserved($query) { return $query->where('is_reserved', 0); }
- 控制器查询时直接调用作用域即可:
$donations = Donation::notReserved()->get();
临时方案:Blade层面过滤(不推荐)
如果暂时不方便修改控制器代码,也可以直接在Blade循环中利用集合的where方法做过滤,缺点是会先查询所有数据再在内存中过滤,数据量大时性能较差:
将你现有Blade代码中的循环行修改为:
@foreach ($donations->where('is_reserved', 0) as $donation)
其余代码保持不变即可。
内容的提问来源于stack exchange,提问作者Antony_Web
相关产品推荐
相关产品推荐

