Laravel中点击新增分组跳转时同时打开全部分组如何解决?
我有两条记录。
点击+号时预期仅打开目标分组,但实际运行时两个分组都会被打开。
相关代码
1. 表结构
slider_groups 表
Schema::create('slider_groups', function (Blueprint $table) { $table->id(); $table->string('title')->nullable(); $table->timestamps(); });
sliders 表
Schema::create('sliders', function (Blueprint $table) { $table->id(); $table->foreignId('userId')->constrained('users')->cascadeOnDelete(); $table->unsignedBigInteger('groupId')->nullable(); $table->string('src')->nullable(); $table->timestamps(); });
2. 视图代码(groups.blade.php)
<a href="{{ route('admin::sliders.index', $sliderGroup->id) }}" class="mr-1"> <i class="la la-plus text-grey text-shadow-custom font-medium-4 font-weight-normal"></i> </a>
3. 路由配置(web.php)
Route::resource('slider-groups', 'Admin\SliderGroupController'); Route::prefix('slider-groups/{sliderGroupId}')->group(function(){ Route::resource('sliders', 'Admin\SliderController'); });
修复方案
问题根因
- 路由传参不匹配:路由定义的参数名为
sliderGroupId,生成路由时仅传值没有指定参数名,参数会被错误拼到URL的query参数中,控制器无法正确获取分组ID - SliderController的index方法没有按传入的分组ID过滤滑块数据,直接返回了所有分组的记录
操作步骤
- 修正视图路由生成逻辑,明确指定参数名:
<a href="{{ route('admin::sliders.index', ['sliderGroupId' => $sliderGroup->id]) }}" class="mr-1"> <i class="la la-plus text-grey text-shadow-custom font-medium-4 font-weight-normal"></i> </a>
- 调整
Admin\SliderController的index方法,添加分组过滤逻辑:
public function index($sliderGroupId) { // 校验分组是否存在 $sliderGroup = \App\Models\SliderGroup::findOrFail($sliderGroupId); // 按分组ID过滤对应滑块 $sliders = \App\Models\Slider::where('groupId', $sliderGroupId)->get(); return view('your-view-path', compact('sliderGroup', 'sliders')); }
- 可选优化:给sliders表的groupId字段添加外键约束,保证数据一致性:
// 修改sliders表迁移的groupId字段定义 $table->foreignId('groupId')->nullable()->constrained('slider_groups')->cascadeOnDelete();
内容的提问来源于stack exchange,提问作者Mahmoud Khosravi
相关产品推荐
相关产品推荐

