Laravel 8中如何仅在视图展示is_active值为1的已发布文章数据?
Laravel布尔字段筛选已发布文章问题解决
问题核心原因
你当前控制器中的查询仅构造了查询构造器实例,没有触发SQL查询获取实际结果集,因此传到视图的不是可遍历的文章数据,无法正常展示已发布内容。
修复方案
- 方案1:直接补全查询执行代码
修改控制器index方法,在where条件后追加get()方法执行查询,布尔值判断直接传整数更符合字段类型规范:
public function index() { $posts = Post::where('is_active', 1)->get(); return view('pages/home', compact('posts')); }
- 方案2:封装查询作用域(适合多场景复用已发布筛选逻辑)
在Post模型中新增本地作用域方法,后续所有需要筛选已发布文章的场景都可以直接调用,不用重复写where条件:
class Post extends Model { use HasFactory; protected $table = 'posts'; protected $fillable = ['post_title', 'post_slug', 'post_thumbnail', 'post_seq', 'post_excerpt', 'post_description', 'post_meta_title', 'post_meta_description', 'post_meta_keyword', 'is_active', 'created_by']; // 新增已发布文章筛选作用域 public function scopeActive($query) { return $query->where('is_active', 1); } }
控制器中调用方式简化为:
public function index() { $posts = Post::active()->get(); return view('pages/home', compact('posts')); }
额外说明
如果后续需要查询包含草稿的所有文章,直接去掉对应筛选条件即可,无需调整表结构或模型基础配置。
内容的提问来源于stack exchange,提问作者Sutan Firqy
相关产品推荐
相关产品推荐

