首页 > 解决方案 > Laravel 5.6 空字段验证

问题描述

不知何故,我觉得这应该是一个常见的问题,但我似乎无法找到一个明确的答案。

问题很简单:在验证表单时,我想从结果数组中排除空的非必需字段 - 这是为了使用在数据库级别设置的默认值。

由于 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
        ]);

任何有关如何以最干净的方式解决此问题的帮助将不胜感激!我正在考虑制定一个自定义规则来排除字段本身(这样我就可以在整个项目中重用这个验证规则,而不必每次遇到这种情况时都手动执行)。另一种选择是将它设置在模型级别 - 但不是那么热衷于这样做,当它已经在数据库级别完成时必须在那里执行它似乎很奇怪。

谢谢!

标签: laravelformsvalidationdefault-value

解决方案


我认为您可以使用可为空的规则

$userData = $request->validate([
            'email' => 'required|string|email|max:255|unique:users',
            'number_of_whatever'  => 'nullable'
        ]);

推荐阅读