Laravel 8报错1366 Incorrect integer value 分类外键存储失败解决
解决方案
错误原因
你遇到的General error: 1366 Incorrect integer value错误是因为下拉选择框提交的是分类的文本标签值,而非整数类型的分类ID,字符串值无法存入category_id整数字段导致报错。
修复步骤
- 修改前端下拉选择框代码
给<option>标签添加value属性绑定分类ID,同时把旧值回显逻辑移到选项上(<select>标签本身不需要value属性):
<select name="category" id="category" placeholder="Categorie" class="bg-gray-100 border-2 w-full p-4 rounded-lg @error('category') border-red-500 @enderror"> @foreach($cats as $cat) <option value="{{ $cat->id }}" {{ old('category') == $cat->id ? 'selected' : '' }}>{{$cat->lable}}</option> @endforeach </select>
改完后选择分类时提交的就是对应分类的ID值,不会再传文本标签,且不会修改分类列表的展示内容。
2. 给控制器添加分类字段验证
在BookController的store方法验证规则中新增category的校验,确保提交的是合法存在的分类ID:
$this->validate($request, [ 'title' => 'required|max:255', 'author' => 'required|max:255', 'editor' => 'required|max:255', 'ISBN' => 'required|max:255', 'language' => 'required|max:255', 'year' => 'required|max:4', 'copies' => 'required', 'image' => 'required|image', // 新增分类校验规则:必填、整数、必须存在于分类表的id字段 'category' => 'required|integer|exists:categories,id' ]);
如果你的分类表名不是categories,把exists规则里的表名改成你实际的分类表名即可。
修改完成后原有赋值逻辑$book->category_id = $request->category;就可以正常工作。
内容的提问来源于stack exchange,提问作者quoiqueprog
相关产品推荐
相关产品推荐

