You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9中如何筛选posts表非空video列数据并分页?

问题解决方法

你的核心问题是查询条件逻辑错误,where('video', '>', 0)只适用于数值类型字段,但video列应该是存储路径/URL的字符串类型——字符串和数字0比较会被强制转成数字(空字符串或非数字开头的字符串都会转为0),所以这个条件筛选不到任何数据。

正确的查询写法

根据video列的实际存储情况,选择以下方式:

  1. 兼容全Laravel版本的基础写法:筛选video不为null且不是空字符串的记录
// 控制器中的查询代码
$posts = Post::whereNotNull('video')
            ->where('video', '<>', '')
            ->inRandomOrder()
            ->paginate(3);
  1. Laravel 9+简化写法:直接用whereNotEmpty方法,等价于上面的两个条件
$posts = Post::whereNotEmpty('video')
            ->inRandomOrder()
            ->paginate(3);

为什么之前的写法不符合需求

  • Post::inRandomOrder()->simplePaginate(1)没有添加任何筛选条件,所以会返回所有帖子,只是每页显示1条并随机排序,自然不符合你的需求。

视图代码保持正常渲染即可

比如在Blade视图中循环展示帖子和分页:

@foreach($posts as $post)
    <div class="post-item">
        @if($post->video)
            <video src="{{ $post->video }}" controls></video>
        @endif
        <!-- 其他帖子内容,比如标题、描述等 -->
    </div>
@endforeach

<!-- 渲染分页链接 -->
{{ $posts->links() }}

内容的提问来源于stack exchange,提问作者Davi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:05:17