【问题标题】:Laravel 5.2 Validator: limiting unique field check to specific userLaravel 5.2 Validator:将唯一字段检查限制为特定用户
【发布时间】:2016-08-18 19:14:26
【问题描述】:

我试图限制我的 Laravel 5.2 应用程序中的 required:unique 验证器仅针对特定 user_id 的表结果检查我的“slug”列的唯一性。换句话说,slug 确实需要是唯一的,但仅限于每个用户。我已经让它适用于 store() 函数,代码如下:

'slug' => 'required|unique:contents,slug,NULL,id,user_id,' . Auth::id()

效果很好。但是,我无法让 update() 函数正常工作,因为我无法让验证器停止针对当前正在更新的条目的结果检查唯一性。我目前使用的代码是:

'slug' => 'required|unique:contents,slug,' . $content->slug . ',id,user_id,' . Auth::id()

该代码对我来说看起来不正确,但我尝试了几种变体,但它们都没有按照我的意愿工作。在我看来,我认为这会起作用:

'slug' => 'required|unique:contents,id,' . $content->id . ',user_id,' . Auth::id()

但事实并非如此。有人知道我的问题是什么吗?任何指导将不胜感激。

【问题讨论】:

  • 在第二段代码中,你知道你有$content->slug,而不是$content->id吗?除了那个小错误,我希望第二个代码能够工作
  • 是的,我认为第二行也不对,第三行,即: 'slug' => 'required|unique:contents,id,' 。 $content->id 。 ',id,user_id,' 。 Auth::id() 是我期望的工作,但事实并非如此。它允许我将 slug 更新为该用户已经存在的 slug。
  • 最后一行代码丢失了,id,也许这就是它不起作用的原因。试试:'required|unique:contents,id,' . $content->id . ',id,user_id,' . Auth::id()
  • 我的错,乔纳森,我确实在我的问题的第三行打错了字。不过,正确的版本在我之前的评论中。正确答案来自下面的乔迪。感谢您的帮助!

标签: php validation laravel artisan-migrate


【解决方案1】:

如果不知道模型中的实际属性名称,很难给出正确的答案。验证器支持以下参数

unique:{0},{1},{2},{3},{4},{5}

地点:

{0} = 正在验证的表名

{1} = 正在验证的列名

{2} = {0} 中的行 ID 值以跳过验证

{3} = {0} 中主键列的名称

{4} = {0} 中附加过滤器列的名称

{5} = 附加过滤列的值

所以,我们显然有{0}{1}{2}{5} 的值。从您的问题信息中,我不确定{3}{4} 的正确值是什么。如果让我猜测,我会这样写验证器规则:

'slug' => 'required|unique:contents,slug,' . $content->id . ',id,user_id,' . Auth::id()

【讨论】:

  • 非常感谢验证器参数定义。我在任何地方都没有看到这些,甚至在 Laravel 网站上也没有。我现在明白了。再次感谢!
猜你喜欢
  • 2017-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2016-07-23
  • 2012-02-12
  • 1970-01-01
  • 2018-02-12
相关资源
最近更新 更多