Php 存在除零之外的Laravel验证不可为空

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 验证中的字段必须存在于给定的数据库表中 应用于您的案例:您正在请求验证中的字段

在分类表中,我有以下列 身份证,家长身份证,头衔

现在,parent_id是子类别的父类别,但是对于根/主类别,parent_id是0,因为它们没有父类别

<?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
验证规则,正如我在回答中所写的那样