【发布时间】:2020-08-01 15:11:13
【问题描述】:
我有一个agents 表的以下数据库表结构
+--------------------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| first_name | varchar(255) | NO | | NULL | |
| phone | varchar(255) | NO | MUL | NULL | |
| active | tinyint(1) | YES | | NULL | |
+--------------------------+---------------------+------+-----+---------+----------------+
phone 和 active 字段具有 2 列唯一约束,这意味着一次只有一个 phone 应处于活动状态。 active 列是一个可为空的布尔值,因为如果我将 0 设置为 falsy 值,那么如果有两个非活动的 phone 数字,则 2 列唯一约束将失败(因为 null != null 它在当我手动将其插入数据库时的数据库级别)。我希望我在这里很清楚。
问题
我正在尝试为此功能设置验证规则。因此,在创建代理时,如果有任何active 电话号码,则验证应该失败,否则,应该插入记录。
这是我的验证规则
$request->validate([
'first_name'=> 'required',
'active' => 'required',
'phone' => [
'required',
Rule::unique('delivery_agents')->using(function ($query) use ($request) {
$query->where('phone', $request->phone)
->where('active', $request->active ? $request->active : null); // explicitly checking against null value or true not 0
})
],
]);
但是当有一个非活动电话号码时验证规则失败(即:phone 号码与active = null)
我相信原因是验证规则会检查带有active = null 的电话号码,并且由于有一条这样的记录,它会引发验证失败异常。我该如何缓解这种情况。
找到了here 的帖子,但这与我在问题中发布的内容相同。
使用 Laravel 6 和 Mysql 8
【问题讨论】:
标签: php mysql laravel validation