Laravel搜索功能异常:无论查询内容如何均无结果求助
Laravel文章搜索无结果问题修复
问题根源
你的代码逻辑存在明显错误:尽管在判断搜索参数后正确赋值了$posts变量,但最后返回视图时,你又重新执行了Post::paginate(2),直接覆盖了之前处理好的搜索结果或默认分页数据。这导致无论用户输入什么搜索内容,页面始终显示默认的2篇文章,完全没用到你之前筛选的$posts。
修复步骤
1. 修正控制器的返回逻辑
把return语句中->with('posts', Post::paginate(2))替换为->with('posts', $posts),确保传递的是根据搜索条件处理好的文章数据:
class WelcomeController extends Controller { public function index(){ $search = request()->query('search'); if ($search){ $posts = Post::where('title', 'LIKE', "%{$search}%")->paginate(1); } else { $posts = Post::paginate(2); } return view('welcome') ->with('categories', Category::all()) ->with('tags', Tag::all()) ->with('posts', $posts); // 改为传递处理好的$posts变量 } }
2. 优化搜索安全性(可选)
为避免SQL注入风险,推荐使用参数绑定写法:
// 写法1:使用DB::raw绑定参数 $posts = Post::where('title', 'LIKE', DB::raw('?'), ["%{$search}%"])->paginate(1); // 写法2:Laravel简洁参数绑定 $posts = Post::where('title', 'like', "%{$search}%")->paginate(1);
3. 验证视图数据接收
确保blade视图中通过$posts变量遍历展示文章:
@foreach($posts as $post) <!-- 文章内容展示代码 --> @endforeach <!-- 分页链接渲染 --> {{ $posts->links() }}
内容的提问来源于stack exchange,提问作者peter mushemi
相关产品推荐
相关产品推荐

