如何使用Laravel存储多个复选框

如何使用Laravel存储多个复选框,laravel,laravel-8,Laravel,Laravel 8,我正试图将我在视图中选中的复选框保存到数据库中。我有一个标题、一个类型文章(下拉列表)、主题(复选框)和内容 我在文章列表.blade.view中这样做: @foreach ($themes as $theme) <div class="form-check form-check-inline"> <input class="form-check-input" type="checkbox" nam

我正试图将我在视图中选中的复选框保存到数据库中。我有一个
标题
、一个
类型文章
(下拉列表)、
主题
(复选框)和
内容

我在
文章列表.blade.view中这样做

@foreach ($themes as $theme)  
   <div class="form-check form-check-inline">
     <input class="form-check-input" type="checkbox" name="themeCheckbox[]" value="{{ $theme->theme_id }}">
     <label class="form-check-label">{{ $theme->nom_theme }}</label>
   </div>
@endforeach
除了复选框问题,一切都很好。我确实在视图中显示了我的错误,这就是我提交3个复选框时显示的内容:

The selected themeCheckbox.0 is invalid.
The selected themeCheckbox.1 is invalid.
The selected themeCheckbox.2 is invalid.
我有一个数据透视表(文章和主题为表,文章主题为数据透视表)

编辑:


问题是
$themes=Theme::其中('nom_Theme',$data['themeCheckbox'])->get()
,我需要将
nom\u-theme
更改为
id\u-theme
您应该将
$theme->theme\u-id
传递给复选框的名称数组。然后,检查该id是否存在于数组中,因为复选框的默认行为是删除未选中的项

<input class="form-check-input" type="checkbox" name="themeCheckbox[{{$theme->theme_id}}]" value="1">
因此,您必须在代码中查找键,而不是值,因为它们是唯一的(1)。如下所示修改控制器,并在其中使用
array\u keys()
方法:

$themes = Theme::whereIn('nom_theme', array_keys($data['themeCheckbox']))->get();
更新 删除不必要的验证
'themeCheckbox'=>'必需的|数组|最小值:1',
,并修复另一个验证,如下所示:

themeCheckbox=[
    '1' => '1';
    '2' => '1';
    '3' => '1';
    '4' => '1';
    '5' => '1';
];
'themeCheckbox.*' => 'required',

你好,首先谢谢你的帮助。我添加了您要求的内容,我的表单下面有一个错误:
所选的Themeckekbox.$theme->theme\u id无效。
正如我所说,我有一个
pivot
表,其中有我的
id文章
主题id
我忘了在
name=“Themeckekbox[$theme->theme\u id]”中添加
。我在答案中修改了它。我现在发现这个错误
themeCheckbox.1字段有一个重复的值。themeCheckbox.3字段有一个重复的值。
当我选中第一个和第三个复选框时。@Leon注意答案中的更新并修复验证NVM,没有看到更新。现在我有了这个错误:
调用undefined方法illumb\Database\Eloquent\Relations\belongstomy::associate()
我想我有这个错误,因为在
文章
模型中,我这样做:
返回$this->belongstomy('App\Models\Theme','themes\u articles','id\Article','Theme\u id')和我的控制器内部
$article->theme()->关联($themes)。我有归属关系和关联函数。我应该用什么替换
associate()
'themeCheckbox.*' => 'required',