在 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