【发布时间】:2020-11-10 15:39:48
【问题描述】:
使用 Laravel 4.2 应用程序(是的,这是一个不值得升级的旧应用程序)
尝试处理用户被软删除并想重新创建帐户的情况。
遇到注册新用户不起作用的问题,因为“电子邮件”列是唯一的,并且软删除的记录仍然存在。
我更愿意创建一个新的用户记录(所有其他字段为空),具有相同的递增 ID 以保持与其他软删除记录的关系。
所以物理上删除旧记录并使用旧 ID 创建一个新记录?正确的?不工作。
在记录上调用 forceDelete() 有效,它确实将其从数据库中删除,但随后立即尝试创建新记录会引发“重复键”异常。刷新页面不再是问题,因为它看不到旧记录。
似乎错误来自MYSQL本身,虽然php应该在执行插入查询之前等待对删除查询的响应,所以此时mysql应该知道记录已被删除。
这个错误是否可能实际上来自 Laravel 中的某种内存缓存?
如果相关的话,我也在使用 Sentinel 身份验证包。
这是基本代码:
$found = User::where('email', $email)->first();
if ($found->deleted_at) {
$old_id = $found->id;
$found->forceDelete();
$found->save();
$unique_id = $this->generateUnique(NULL, $first_name . $last_name);
$user = Sentinel::registerAndActivate(array(
'id' => $old_id,
'email' => $email,
'password' => $password,
'first_name' => $first_name,
'last_name' => $last_name,
'unique_id' => $unique_id,
'preferred_lang' => $this->locale,
));
}
这会导致
SQLSTATE[23000]:违反完整性约束:1062 重复条目 键 'users_email_unique' 的 'whoever@mail.com'
有人知道这是为什么吗?有没有简单的解决办法?
【问题讨论】: