当前位置: 首页 > 知识库问答 >
问题:

使用软删除数据的Laravel唯一验证

穆旭尧
2023-03-14

我想用Laravel唯一的验证器来实现SoftDeletes。我已经尝试了很多次,但它产生了这样一个错误。我该怎么办?提前道谢。下面是我的代码示例。

 public function store(Request $request)
{
    $request->validate([
        'nama' => 'required',
        'nim' => [
            'required',
            'size:10',
            Rule::unique('students')->where(function ($query) {
                return $query->where('deleted_at', NULL);
            })
        ],
        'email' => 'required|email',
    ]);

    Student::create([
        'major_id' => $request->major_id,
        'nama' => $request->nama,
        'slug' => Str::of($request->nama)->slug('-'),
        'nim' => $request->nim,
        'email' => $request->email,
    ]);
    return redirect('/students')->with('status', 'Success');
}

共有1个答案

山寒
2023-03-14

您得到的错误来自数据库中的约束。您在代码中所做的任何事情都无法对抗这种情况。数据库不关心软删除。

您需要首先从数据库中移除约束,然后使用您的解决方案或此后的解决方案check-if-name-is-unique-ment-non-deleted-items-with-laravel-validation中的解决方案

若要删除约束,请运行此查询

ALTER TABLE students DROP CONSTRAINT students_nim_unique;
 类似资料:
  • 我有这样布局的模型: 这里的场景是我永远不希望用户删除数据。相反,删除只会隐藏记录。但是,我仍然希望所有非软删除的记录都遵循唯一的键约束。基本上,我希望有尽可能多的重复的已删除记录,但只有一个唯一的未删除记录可以存在。所以我本来想包括“已删除”字段(由django安全删除库提供),但问题是Django的唯一检查因“psycopg2”而失败。完整性错误:重复的键值违反了 ['field2', 'fi

  • 我使用而不是,当我验证为 我得到 SQLSTATE[42S22]:未找到列:1054“where子句”中的未知列“id”(SQL:选择count(*)作为来自

  • 本文向大家介绍yii2 从数据库验证唯一值:唯一验证,包括了yii2 从数据库验证唯一值:唯一验证的使用技巧和注意事项,需要的朋友参考一下 示例 如果输入现有值,某些人会遇到有关无法显示错误消息的问题。例如,我不允许用户使用现有电子邮件进行注册。 视图 控制者 模型            

  • 问题内容: laravel 4文档提到了唯一的字段验证。他们在这里说明了如何在唯一验证中包含where子句。唯一表的单个WHERE子句,例如: http://laravel.com/docs/validation#rule-unique 现在,我假设这样做是这样的: 然后检查此查询是否返回结果,如果没有通过验证器。 所以我想知道是否有一种方法可以添加更多的where子句?如果是这样怎么办? 问题答

  • 问题内容: 故事 我将编写一些代码来管理应用程序中已删除的项目,但是我将对其进行软删除,以便在需要时可以将其返回。在隐藏或删除项目时,我有一个层次结构要尊重我的应用程序的逻辑。 我顺理成章地将我的物品放在三个容器中,分别放入国家,城市,地区和品牌。每个项目都应该属于一个国家,城市,地区和品牌。现在,如果我删除了一个国家,则应该删除属于给定国家的城市,地区,品牌和商品。如果我删除了该城市,它还应该删

  • 问题内容: 我相信在A,B,C,D的两个表字段之间插入了唯一索引,以防止重复。但是我以某种方式简单地对它们做了一个普通索引。因此插入了重复项。它是2000万个记录表。 如果我将现有索引从普通索引更改为唯一索引,或者只是为A,B,C,D添加新的唯一索引,由于存在唯一记录,重复项将被删除还是添加失败?我将对其进行测试,但它已达到3000万条记录,并且我既不希望将表弄乱或复制它。 问题答案: 如果表中有