【发布时间】:2019-01-07 17:04:41
【问题描述】:
不知何故,我觉得这应该是一个常见问题,但我似乎无法找到一个明确的答案。
问题很简单: 在验证表单时,我想从结果数组中排除空的非必填字段 - 这是为了使用在数据库级别设置的默认值。
由于 Laravel 默认使用 ConvertEmptyStringsToNull 中间件(我不太热衷于更改它),这意味着我的空字段将被转换为“null”并发送到我的数据库(因此没有得到它们的默认值,并且实际上破坏了查询,因为这些字段在数据库级别不可为空)。
$userData = $request->validate([
'email' => 'required|string|email|max:255|unique:users',
'number_of_whatever' => //if this field is empty, I want it stripped out the $userData array - or automatically default to the database default
]);
任何有关如何以最简洁的方式解决此问题的帮助将不胜感激!我正在考虑制定一个将字段本身排除在外的自定义规则(这样我就可以在整个项目中重用这个验证规则,而不必每次遇到这种情况时都手动执行)。 另一种选择是在模型级别设置它 - 但不是那么热衷于这样做,当它已经在数据库级别完成时,必须在那里这样做似乎很奇怪。
谢谢!
【问题讨论】:
-
您是否尝试过从您不想验证的字段的验证请求中删除“必填”?
-
您可以尝试表单请求验证。它有
$validated = $request->validated();它只返回你验证过的字段。详情请查看laravel.com/docs/5.6/validation#form-request-validation -
@KenziieeFlavius,这将导致该字段在未填充时设置为 null - 与“有时”或“当前”规则相同
-
@rkj,这与我现在使用的行为相同。除非我错过了什么?该字段正在验证中,但设置为 null,因此它存在并在结果数组中
-
@Ours 如果您验证请求,然后使用发布的数据,该 null 将成为默认值。我的逻辑是如果验证失败,不要继续。但如果 post 数据已经过验证,则使用 post 数据创建对象并依赖表默认处理空结果。我会尝试做一个例子并确认这一点!
标签: laravel forms validation default-value