Laravel 9搜索表单问题:视图中$users变量未定义求助
解决$users变量未定义的问题
1. 先搞定首次访问的变量缺失问题
你现在的GET路由/students是用闭包直接返回视图的,根本没传$users变量,所以第一次打开页面就会报变量未定义。有两种改法:
简单改法:闭包里传空集合
Route::get('/students',function(){ // 传个空的集合给视图,避免报错 return view('students',['users' => collect()]); }); Route::post('/students',[UsersController::class,'search']);
规范改法:用控制器统一处理
在UsersController里加个index方法,用来处理首次访问的请求:
public function index() { // 这里可以返回所有学生,或者空集合,看你需求 $users = Students::all(); return view('students', compact('users')); }
然后把路由改成这样:
Route::get('/students',[UsersController::class,'index']); Route::post('/students',[UsersController::class,'search']);
2. 给视图加个兜底逻辑
就算传了变量,万一搜索结果为空,foreach也容易出问题,换成@forelse更稳妥:
<tbody> @forelse ($users as $user) <tr> <td>{{$user->id}}</td> <td>{{$user->name}}</td> <td>{{$user->email}}</td> <td>{{$user->department}}</td> <td>{{$user->course}}</td> <td> <!-- 记得补全你的操作按钮代码 --> </td> </tr> @empty <tr> <td colspan="6" class="text-center">没找到匹配的学生</td> </tr> @endforelse </tbody>
3. 顺带修复搜索查询的逻辑bug
你现在的where/orWhere写法有问题,会导致查询逻辑混乱,应该把所有模糊查询包在一个闭包里:
$query = Students::where(function($q) use ($request) { $q->where('name','LIKE','%'.$request->search.'%') ->orWhere('email','LIKE','%'.$request->search.'%') ->orWhere('department','LIKE','%'.$request->search.'%') ->orWhere('course','LIKE','%'.$request->search.'%'); })->get();
4. 最后检查模型引入
确保UsersController顶部已经引入了Students模型:
use App\Models\Students;
内容的提问来源于stack exchange,提问作者user3239115
相关产品推荐
相关产品推荐

