Php Laravel 5.1-当前条目的更新名称必须对当前用户ID唯一

Php Laravel 5.1-当前条目的更新名称必须对当前用户ID唯一,php,validation,laravel,authentication,laravel-5.1,Php,Validation,Laravel,Authentication,Laravel 5.1,我在下面的GeckoRequest文件中找到了这个代码。它在很大程度上是有效的,但是如果我尝试更新一个条目并保持当前的名称,它就无法说明名称需要是唯一的。。。这是因为除了在编辑表单中加载的当前条目外,没有其他条目具有此名称 我要做的最好的事情是检查名称对于当前用户是唯一的,但也允许我在不更改名称的情况下更新相同的条目 public function rules() { switch($this->method()) { case 'GET':

我在下面的
GeckoRequest
文件中找到了这个代码。它在很大程度上是有效的,但是如果我尝试更新一个条目并保持当前的名称,它就无法说明名称需要是唯一的。。。这是因为除了在编辑表单中加载的当前条目外,没有其他条目具有此名称

我要做的最好的事情是检查名称对于当前用户是唯一的,但也允许我在不更改名称的情况下更新相同的条目

public function rules()
{
    switch($this->method())
    {
        case 'GET':
        case 'DELETE':
        {
            return [];
        }
        case 'POST':
        {
            return [
                'morph' => 'required',
                'sex' => 'required',
                'genetics' => 'required',
                'name' => "required|unique:geckos,name,NULL,id,user_id," . \Auth::user()->id
            ];
        }
        case 'PUT':
        case 'PATCH':
        {
            return [
                'morph' => 'required',
                'sex' => 'required',
                'genetics' => 'required',
                'name' => "required|unique:geckos,name,NULL,id,user_id," . \Auth::user()->id
            ];
        }
        default:break;
    }
}

您应该能够在规则中指定Gecko资源的id

    case 'PATCH':
    {
        //This is assuming that you're using route model binding
        //and that it's called gecko and not geckos (or something else).

        $id = $this->route('gecko')->id; 

        return [
            'morph' => 'required',
            'sex' => 'required',
            'genetics' => 'required',
            'name' => "required|unique:geckos,name,{$id},id,user_id," . \Auth::user()->id
        ];
    }
这将告诉laravel,除非ID匹配,否则它必须是唯一的

NB在表单验证类中使用route方法时,它将查找url中已传递的其他参数(这些是url中由routes文件中的
{}
包装的部分)。根据这些参数的设置方式和/或您使用的
Laravel
版本,Laravel可能已将参数解析为模型

如果不确定laravel如何在路由中存储参数,请在
rules()
方法中添加
dd($this->route()),提交表格,然后查看回复。该值将位于
参数
数组中

如果它不是以模型的形式存储的,它实际上只是id:
$id=$this->route('gecko')


希望这有帮助

使用唯一验证的Null&id的目的是什么?我这样使用它来执行这件事`'username'=>'required | unique:users,username'.$user->id`我已经很久没有参与这个项目了,我不记得它是干什么用的,但是如果我删除它,它似乎会破坏验证。我们不是检查用户名是否唯一,而是检查壁虎名称在当前用户保存的壁虎中是否唯一。目前,即使我保存同一只壁虎而不更改其名称,它也会抛出一个错误,表示根据我的研发,名称不是唯一的,它给出错误“名称不是唯一的”的唯一方式可能是因为登录的用户ID没有出现,所以请尝试转储Loggedin用户ID并检查ID是否出现。谢谢。我会在午餐休息时试一试:)如果我使用了壁虎这一资源路线,我想我只需要把壁虎改成壁虎?我宁愿现在问,也不愿以后浪费时间haha@AndyHolmes我更新了我的答案,提供了更多的信息。还有,把
gecko
改成
geckos
(或者你在路由文件中调用的参数)。谢谢Ross,更新得也不错。一小时后吃午饭,所以如果一切顺利,我会接受的,那就不行了。基本上,唯一规则遵循此约定:
unique:[表名],[表字段],[何处非值],[何处非值],[何处字段],[何处值]
。如果不指定(或NULL)[whereNot字段],它将采用表的primaryKey。