【问题标题】:Laravel unique validation rule with except not workingLaravel 唯一的验证规则,除了不工作
【发布时间】:2020-02-23 22:23:18
【问题描述】:

Laravel 唯一验证规则,除了列无法更新,我的代码有什么问题?

public function update(Request $request, Article $article)
{
    abort_if($article->user_id !== $request->user()->id, 403);

    $article = $request->user()->articles()->update($request->validate([
        'title' => [
            'required',
            Rule::unique('articles', 'title')->ignore($article->id)
        ],
        'content'=>'required|min:90',
    ]));

    return redirect('articles/'.$article->id)->withSuccess('Article saved.');
}

错误:标题已被占用。

Laravel 版本:6.4.0

感谢您的帮助

【问题讨论】:

    标签: laravel


    【解决方案1】:

    您可以传递文章的整个实例以进行验证,如下所示:

    Rule::unique('articles')->ignore($article);
    

    因为你已经在说要检查哪一列了。

    https://laravel.com/docs/6.x/validation

    【讨论】:

      【解决方案2】:

      删除标题

      Rule::unique('articles', 'title')->ignore($article->id)
      

      ...
      $article = $request->user()->articles()->update($request->validate([
              'title' => [
                  'required',
                  Rule::unique('articles')->ignore($article->id)
              ],
              'content'=>'required|min:90',
          ]));
      ...
      

      希望对你有帮助

      更多信息,请查看rule-unique

      【讨论】:

      • 似乎我在数据库中有重复的标题。我不知道为什么,但我删除了数据库中的所有重复项,现在它可以工作了。 Rule::unique('articles')->ignore($article->id) 和 Rule::unique('articles')->ignore($article) 和 Rule::unique('articles', 'title') ->ignore($article->id) 现在都在工作。
      【解决方案3】:

      如果您在$request->user()->articles() 上运行更新,您将更新所有用户的文章。如果用户只有 1 篇文章,那么它应该可以正常工作,但是如果有更多则这将导致数据被覆盖。

      改为:

      $article->update($request->validate([
          'title' => [
              'required',
              Rule::unique('articles', 'title')->ignore($article->id)
           ],
          'content'=>'required|min:90',
      ]));
      

      【讨论】:

        猜你喜欢
        • 2015-02-27
        • 2018-05-24
        • 1970-01-01
        • 2016-08-03
        • 2015-04-04
        • 2016-04-08
        • 2019-11-15
        • 2022-01-09
        • 2020-09-13
        相关资源
        最近更新 更多