Php 存在除零之外的Laravel验证不可为空
在分类表中,我有以下列 身份证,家长身份证,头衔 现在,parent_id是子类别的父类别,但是对于根/主类别,parent_id是0,因为它们没有父类别Php 存在除零之外的Laravel验证不可为空,php,laravel-5,laravel-validation,Php,Laravel 5,Laravel Validation,在分类表中,我有以下列 身份证,家长身份证,头衔 现在,parent_id是子类别的父类别,但是对于根/主类别,parent_id是0,因为它们没有父类别 <?php 'parent_id'=>'required|exists:categories,id|nullable' // wont work, because parent_id = 0 我认为你的问题在存在的范围内。来自Laravel 5.8 验证中的字段必须存在于给定的数据库表中 应用于您的案例:您正在请求验证中的字段
<?php
'parent_id'=>'required|exists:categories,id|nullable'
// wont work, because parent_id = 0
我认为你的问题在存在的范围内。来自Laravel 5.8
验证中的字段必须存在于给定的数据库表中
应用于您的案例:您正在请求验证中的字段必须有一个值与categories表中的现有id匹配,并且您正在断言
对于根类别/主类别,父类别的id为0,因为它们没有父类别
如果他们没有父项,他们的父项id
将不匹配类别表中的任何id
还请注意,必需的
和可为空的
不应位于同一个验证字段:from
验证中的字段必须存在于输入数据中,而不是
空的。如果出现下列情况之一,则字段被视为“空”
条件是正确的:
- 该值为空
来自
验证中的字段可能为空
因此,您请求字段不为空,但您允许null
值,该值被required
验证规则拒绝
最后,要解决您的问题,您必须执行以下操作:
[
'parent_id'=>'存在:类别,id |可为空'
]
并在根类别上设置NULL
,或使用
[
“父项id”=>“必需”
]
并手动检查您的数据库中是否存在parent\u id
,除了将具有0
旁注:
为了确保您在父id
字段中插入现有id,我建议您添加外键约束并在根类别上设置NULL
:
Schema::create('categories',函数(Blueprint$table){
$table->bigIncrements('id');
//其他定义。。。
$table->unsignedBigInteger('parent_id')->nullable();
$table->foreign('parent_id')->references('id')->on('categories');
});
我认为你的问题在存在的范围内。来自Laravel 5.8
验证中的字段必须存在于给定的数据库表中
应用于您的案例:您正在请求验证中的字段必须有一个值与categories表中的现有id匹配,并且您正在断言
对于根类别/主类别,父类别的id为0,因为它们没有父类别
如果他们没有父项,他们的父项id
将不匹配类别表中的任何id
还请注意,必需的
和可为空的
不应位于同一个验证字段:from
验证中的字段必须存在于输入数据中,而不是
空的。如果出现下列情况之一,则字段被视为“空”
条件是正确的:
- 该值为空
来自
验证中的字段可能为空
因此,您请求字段不为空,但您允许null
值,该值被required
验证规则拒绝
最后,要解决您的问题,您必须执行以下操作:
[
'parent_id'=>'存在:类别,id |可为空'
]
并在根类别上设置NULL
,或使用
[
“父项id”=>“必需”
]
并手动检查您的数据库中是否存在parent\u id
,除了将具有0
旁注:
为了确保您在父id
字段中插入现有id,我建议您添加外键约束并在根类别上设置NULL
:
Schema::create('categories',函数(Blueprint$table){
$table->bigIncrements('id');
//其他定义。。。
$table->unsignedBigInteger('parent_id')->nullable();
$table->foreign('parent_id')->references('id')->on('categories');
});
@Matteo_Meil,谢谢你的想法,我将所有类别都放在选择/选项菜单标签中,在这种情况下,0表示主/根类别。我不能使用null。顺便说一句,我不建议在db中使用null。Laravel具有ConvertEmptyStringsToull
中间件,因此,您可以使用根类别
在选择
中设置空值。顺便说一句,如果您不想使用NULL
,您可能无法按照我在answer@Matteo_Meil,感谢您的想法,我将所有类别都放在选择/选项菜单标签中,在这种情况下,0表示主/根类别。我不能使用null。顺便说一句,我不建议在db中使用null。Laravel具有ConvertEmptyStringsToull
中间件,因此,您可以使用根类别
在选择
中设置空值。顺便说一句,如果你不想使用NULL
你可能无法使用exists
验证规则,正如我在回答中所写的那样