Laravel уникальное правило проверки с исключением не работает - PullRequest
1 голос
/ 28 октября 2019

Уникальное правило проверки 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

Спасибо за помощь

Ответы [ 3 ]

1 голос
/ 28 октября 2019

Удалить заголовок из

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',
    ]));
...

Надеюсь, это поможет

больше информации, отметьте уникальное правило

1 голос
/ 28 октября 2019

Если вы запустите обновление на $request->user()->articles(), вы обновите все статьи пользователя. Если у пользователя есть только 1 статья, тогда она должна работать нормально, однако если их больше, это приведет к перезаписи данных.

Вместо этого выполните:

$article->update($request->validate([
    'title' => [
        'required',
        Rule::unique('articles', 'title')->ignore($article->id)
     ],
    'content'=>'required|min:90',
]));
1 голос
/ 28 октября 2019

Вы можете передать весь экземпляр статьи для проверки, например:

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

Поскольку вы уже говорите, какой столбец проверять.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...