【问题标题】:Updating a model with a unique column in laravel 5在 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 并在后台更新,但我也无法解决这个问题。

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

【问题讨论】:

    标签: laravel-5


    【解决方案1】:

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

    1. 包含异常的表的名称(页)
    2. 异常的列名 (slug)
    3. 包含异常的行的主键。 (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 模型。
    猜你喜欢
    • 2014-04-19
    • 2015-08-06
    • 1970-01-01
    • 2015-04-24
    • 2018-09-07
    • 2016-11-10
    • 1970-01-01
    • 2017-03-16
    相关资源
    最近更新 更多