Laravel 5.1不允许当前用户使用重复的gecko名称

时间:2015-10-17 09:16:10

标签: php laravel-5.1

我的应用程序有这种情况,我会尽力解释我正在尝试做什么。

在我的迁移中,我将我的gecko name列设为唯一($table->string('name')->unique())。这显然意味着gecko名称​​必须对所有用户来说都是唯一的 - 这不是我想要做的,我想确保当前用户不能使用相同的名称用于另一个壁虎

例如:

  

如果用户1制作一个名为Bob的壁虎,而用户2制作了一个名为Bob的壁虎就可以了。

     

如果用户1制作了一个名为Bob的壁虎,然后制作了另一个壁虎   叫鲍勃 - 这不会很好。

使这项工作的最佳方式/做法是什么?

编辑:

存储方式:

public function store(GeckoRequest $request)
{

    Gecko::create($request->all());

    flash()->success('Success!', 'Your gecko has been created');

    return redirect()->back();

}

3 个答案:

答案 0 :(得分:1)

它认为当当前用户创建一个壁虎时,你应该在GeckoController中检查这个:

public function store(GeckoRequest $request)
{
    $data = $request->all();
    //if your geckoname input name is: geckoname
    if(!empty(Gecko::where('name', $data['geckoname'])->where('user_id', Auth::user()->id)->get()->toArray())) {
        //do something if the gecko already exist
    } else {
        //if it doesn't exist, create the gecko
        Gecko::create($data);
        flash()->success('Success!', 'Your gecko has been created');
        return redirect()->back();
    }
}

gecko table中,名称不一定是唯一的。

答案 1 :(得分:1)

您可以与您正在创建的1字段分开添加唯一索引:

$table->unique(['user_id', 'name']);

文档:http://laravel.com/docs/5.1/migrations#creating-indexes

答案 2 :(得分:1)

使用示例变量Blueprint中的$table类,您还可以单独定义唯一:

$table->unique(['user_id','name']);

在数据库之前捕获这些约束也是明智之举。所以你的逻辑(php)也应该意识到这一点,为了做到这一点,你可以使用unique validation rule

'name' => "unique:geckos,name,NULL,id,user_id," . \Auth::user()->id