Laravel 强制使用唯一规则忽略给定 ID 不起作用
Laravel Forcing A Unique Rule To Ignore A Given ID not working
我试图忽略给定 ID 的唯一角色,但我不断收到以下错误:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry
'user@updated.com' for key 'users_email_unique' (SQL: update users
set name
= Name, email
= user@updated.com, updated_at
=
2018-04-06 10:01:27 where id
= 1)
在我的 UserUpdateRequest
class 中,我设置了规则:
public function rules()
{
return [
'email' => 'required|email|unique:users,email,' . $this->route()->parameter('user'),
'name' => 'required',
];
}
$this->route()->parameter('user')
获取当前模型 ID。
不确定我在这里的规则有什么问题,有人有什么想法吗?
这里是我调用更新的地方:
public function update(Requests\UserUpdateRequest $request, $id)
{
$result = $this->service->update($request->except(['_token', '_method']));
if ($result) {
return back()->with('message', 'Successfully updated');
}
return back()->with('message', 'Failed to update');
}
数据库:
这是一个 SQL 错误,您对 sql table 有唯一约束。可能在您进行迁移时添加了 table->string("email")->unique()
出现此错误是因为您试图在数据库中保存重复的条目。您可以看到在您的索引中所有 e-mails 都必须是唯一的。
如果您尝试将记录更改为已被其他人使用的 E-Mail 地址,则会收到完整性约束错误消息。
问题是我没有将用户 ID 传递给该函数,所以它更新了当前登录用户的记录,结果它会触发唯一规则。您可以在查询中看到它正在执行 WHERE id =1
因为它正在使用 Auth::id();
.
进行更新
我试图忽略给定 ID 的唯一角色,但我不断收到以下错误:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'user@updated.com' for key 'users_email_unique' (SQL: update
users
setname
= Name,updated_at
= 2018-04-06 10:01:27 whereid
= 1)
在我的 UserUpdateRequest
class 中,我设置了规则:
public function rules()
{
return [
'email' => 'required|email|unique:users,email,' . $this->route()->parameter('user'),
'name' => 'required',
];
}
$this->route()->parameter('user')
获取当前模型 ID。
不确定我在这里的规则有什么问题,有人有什么想法吗?
这里是我调用更新的地方:
public function update(Requests\UserUpdateRequest $request, $id)
{
$result = $this->service->update($request->except(['_token', '_method']));
if ($result) {
return back()->with('message', 'Successfully updated');
}
return back()->with('message', 'Failed to update');
}
数据库:
这是一个 SQL 错误,您对 sql table 有唯一约束。可能在您进行迁移时添加了 table->string("email")->unique()
出现此错误是因为您试图在数据库中保存重复的条目。您可以看到在您的索引中所有 e-mails 都必须是唯一的。 如果您尝试将记录更改为已被其他人使用的 E-Mail 地址,则会收到完整性约束错误消息。
问题是我没有将用户 ID 传递给该函数,所以它更新了当前登录用户的记录,结果它会触发唯一规则。您可以在查询中看到它正在执行 WHERE id =1
因为它正在使用 Auth::id();
.