Laravel Slug 更新记录
Posted
技术标签:
【中文标题】Laravel Slug 更新记录【英文标题】:Laravel Slug Update Record 【发布时间】:2019-03-04 01:39:08 【问题描述】:如果值没有改变,我想忽略 slug。每当我更新表单时,我都会收到此错误。
这是我的验证请求。
命名空间 App\Http\Requests\Admin;
使用 Illuminate\Foundation\Http\FormRequest;
类 ProductInsertFormRequest 扩展 FormRequest /** * 确定用户是否有权提出此请求。 * * @return 布尔值 */ 公共函数授权() 返回真;
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
return [
'title'=>'required',
'regularPrice'=>'required',
'slug'=>'required|alpha_dash|min:5|max:255|unique:products,slug',
];
【问题讨论】:
您在更新时遇到错误。显示更新帖子的代码。 【参考方案1】:要在检查唯一性时忽略数据库表中的特定行,您需要使用unique()
规则和ignore()
函数
'slug' => ['required', 'alpha_dash', 'min:5', 'max:255', Rule::unique('products', 'slug')->ignore($this->product->slug)
这将检查 'products' 表的 'slug' 列中的唯一性,但具有 'this slug' 的特定行除外
【讨论】:
导入规则use Illuminate\Validation\Rule;
抱歉有错误ignore($this->product->slug)
我更新了答案
应该有一个你要给update()
函数更新的对象。我猜对象名称是“产品”,因此对象在$this
范围内。您可以以$this->product->slug
的身份访问该对象和该对象的“slug”(确保将此答案与您的变量名匹配)
这是我更新产品的代码.. public function update(ProductInsertFormRequest $request, $id) $decrypted = Crypt::decrypt($id); $product=Product::whereId($decrypted)->firstOrFail(); $product->title=$request->get('title'); $product->slug=$request->get('slug'); $product->update();
好的。您正在提供要更新的产品的 $id。因此您需要从数据库中显式获取产品或产品 slug 以检查唯一性。这样做。在rules()
函数中执行此操作。 $slug = Product::whereId(Crypt::decrypt($this->id))->pluck('slug')->first();
然后在 ignore() 函数中 ignore($slug)
试试看【参考方案2】:
-
Rule 中的 Ignore() 函数仅适用于 id。
所以我把代码改成如下:
public function rules()
$decrypted = Crypt::decrypt($this->id);
//$slug = Product::whereId($decrypted)->pluck('slug')->first();
//return dd($slug);
return [
'title'=>'required',
'regularPrice'=>'required',
'slug' => ['required', 'alpha_dash', 'min:5', 'max:255', Rule::unique('products', 'slug')->ignore($decrypted)]
];
【讨论】:
以上是关于Laravel Slug 更新记录的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 Laravel 尝试将其保存到数据库的情况下在 Eloquent 模型中使用受保护的属性
Laravel文档阅读笔记-Laravel Str slug() Function Example
Laravel文档阅读笔记-Laravel Str slug() Function Example