在 laravel 5 中更新具有唯一列的模型

Posted

技术标签:

【中文标题】在 laravel 5 中更新具有唯一列的模型【英文标题】:Updating a model with a unique column in laravel 5 【发布时间】:2015-12-09 16:46:38 【问题描述】:

我已经尝试关注this question,这似乎是我想要的,但没有运气。

我有一个Page 模型,它有一个递增的 id、一个标题、一个 slug(唯一)和一个 html 列。我希望能够更改标题、slug 和 html 字段。我已经尝试添加规则:

'slug' => 'required|unique:pages,slug,$this->slug',

对于我的PATCH 请求,但是当我提交我的表单(使用相同的 slug)时,我收到一个错误,它已经被占用。如果我更改 slug,标题和 html 会更改,但 slug 不会。

理想情况下,我宁愿自动生成 slug 并在后台更新,但我也无法解决这个问题。

如何在更新模型时允许更改唯一字段,或自动生成它?

【问题讨论】:

【参考方案1】:

您需要为unique 规则提供三个参数来添加例外。

    包含异常的表的名称(页) 异常的列名 (slug) 包含异常的行的主键。 (id)

在您的情况下,主键是 id 字段而不是 slug 字段。

'slug' => 'required|unique:pages,slug,' . $this->id

【讨论】:

$this->id 为空。如何获取 ID? 这将取决于您如何进行验证。你在使用验证器类吗?在你的控制器中处理它? ID 是否在URI 中? $this->route('id'); 如果 slug 在 URI 中,您可以使用 slug 检索行(我假设它是唯一的),然后从 eloquent 对象返回 id。 Page::where('slug', $this->route('slug'))->first()->id? 我最终选择了$this->route('page')->id。我在我的 routes.php 文件中使用模型绑定,所以我只需要抓住它,它就是我现成的 Page 模型。

以上是关于在 laravel 5 中更新具有唯一列的模型的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 查询构建器以选择具有唯一列值的多行(具有另一列的最大值)

如何在 laravel 的配置文件工厂中提供唯一的 user_id

具有唯一字段的 Laravel 验证服务

在 laravel 中一次更新多个列的值

雄辩的模型属性作为骆驼案例 [Laravel 5.2] [Dingo API]

有没有办法检查 laravel 5.2 中的几个输入是不是唯一?