【问题标题】:Laravel unique validation with softdeletes dataLaravel 使用软删除数据进行独特验证
【发布时间】:2021-07-07 16:15:34
【问题描述】:

我想使用 Laravel Unique 验证器来实现 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');
}

【问题讨论】:

标签: php laravel validation


【解决方案1】:

您遇到的错误来自数据库中的约束。您在代码中所做的任何事情都无法反驳。数据库不关心软删除。

您需要先从数据库中删除约束,然后使用您的解决方案或这篇文章中的解决方案check-if-name-is-unique-among-non-deleted-items-with-laravel-validation

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

ALTER TABLE students DROP CONSTRAINT students_nim_unique;

最佳做法是创建一个运行此查询的新迁移。小心down()方法,如果表中有重复的nim(软删除与否),您将无法放回约束

【讨论】:

  • 另一种方法是为包括 nim 和 deleted_at 的列对指定唯一约束
  • @apokryfos 这可以工作,防止有两个带有 null 作为 deleted_at 值的 vim。
猜你喜欢
  • 2017-06-02
  • 2019-02-16
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 2014-10-26
  • 2018-09-26
  • 2020-03-05
相关资源
最近更新 更多