如何对 laravel 表单请求提出条件

Posted

技术标签:

【中文标题】如何对 laravel 表单请求提出条件【英文标题】:How to make conditions on laravel form request 【发布时间】:2018-08-17 14:03:09 【问题描述】:

我有一个问题,

我有一个控制器,我有一个表单请求来验证更新。

例如,我想提出条件。如果我更新“名称”,表单请求允许更改名称,但如果我没有进行更改,请使用相同的名称并且不会出现“唯一规则”,因为有时我必须更改名称,但有时不需要更改名称是当我没有更改名称时,因为如果我输入相同的名称,我会收到“重复”的消息,如果我尝试更新另一个 ID,则会出现“重复”。

我不知道你是否理解,但我想具体一点。

我的规则是下一个有条件的。

    public function rules()

        if  (Attribute::where('name', '=', Request::get('name'))->count() == 1) 
            return [
                'name' => 'required'
            ];
         elseif (Attribute::where('name', '=', Request::get('name'))->count() != 1) 
            return [
                'name' => 'unique:attributes'
            ];
        
    

所以我比较了名称计数是否仅需要 ==1,但何时 !=1 仅唯一但无法正常工作。

有什么建议吗?

【问题讨论】:

在更新详细信息时插入和删除唯一规则时只需将名称设为唯一 我在另一个 RequestForm 上有一条规则,在插入时是唯一的,但用户可以更新名称但不使用某些名称,如果他没有更新名称,则可以在没有“重复”消息的情况下插入 使用了哪个 laravel 版本? 我使用的是5.5版本 @FMoreira 我已经添加了我的答案,请试一试:) 【参考方案1】:

根据这个答案,

How validate unique email out of the user that is updating it in Laravel?

您可以忽略当前用户详细信息并保留唯一规则,同时在此类规则中验证更新请求,

根据文档,

强制使用唯一规则以忽略给定 ID:

有时,您可能希望在唯一检查期间忽略给定的 ID。例如,考虑一个包含用户名、电子邮件地址和位置的“更新配置文件”屏幕。当然,您需要验证电子邮件地址是否唯一。但是,如果用户只更改名称字段而不更改电子邮件字段,则您不希望引发验证错误,因为用户已经是电子邮件地址的所有者。如果用户提供的电子邮件地址已被其他用户使用,您只想抛出验证错误。要告诉唯一规则忽略用户的 ID,您可以将 ID 作为第三个参数传递:

更新时的规则应该是这样的,

'name' => 'unique:attributes,name,'.$attribute->id

这里,$attribute 指的是正在更新的属性。

希望你能理解。

【讨论】:

此解决方案工作完美,但如何防止用户修改另一个“id”并输入相同的名称。在另一个“id”上,我认为必须首先出现“重复”,我必须创建一个条件(我认为是这样)以防止另一个使用使用相同的名称使用 id,并且名称可能是 @FMoreira 你是如何在表单请求中提供 id 的?【参考方案2】:

您可以使用Rule 来检查唯一性

 use Illuminate\Validation\Rule;

 Rule::unique('table_name')->ignore('id');

【讨论】:

这个解决方案工作完美,非常简单,但我如何防止用户修改另一个“id”并输入相同的名称。在另一个“id”上,我认为必须首先出现“重复”,我必须做出一个条件(我认为是这样)以防止另一个使用使用相同的名称使用 id,并且名称可能是 在更新记录时,您必须在请求中发送 id,以便您可以忽略。 我认为你不明白。我可以正确忽略名称,但如果我在第二个示例中更改 id(例如 attributes/1?name=123123&cat_id=1 for attributes/2?name=123123&cat_id=1 )必须看起来像名称存在(重复)但如果我仅当我不更新第一个案例的名称时才忽略工作 field_name' => 'sometimes|unique:table_name,field_name,ignore_id',你有这样的验证吗? 'name' => ['required',Rule::unique('categories')->ignore($this->name)] 像这样

以上是关于如何对 laravel 表单请求提出条件的主要内容,如果未能解决你的问题,请参考以下文章

我想自学laraver,请诸位前辈给一些建议,谢谢

尝试通过 AJAX 验证 Laravel 表单时出现错误 422

如何从另一个表中获取数据?这样我就可以提出条件并建立关系(Laravel + Vue)

laraver框架学习------工厂模型填充测试数据

Laravel 5.4 表单请求唯一验证:如何访问 id?

在 Laravel 5 中使用表单请求验证时如何添加自定义验证规则