如何使用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',