我的应用程序有这种情况,我会尽力解释我正在尝试做什么。
在我的迁移中,我将我的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();
}
答案 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']);
答案 2 :(得分:1)
使用示例变量Blueprint
中的$table
类,您还可以单独定义唯一:
$table->unique(['user_id','name']);
在数据库之前捕获这些约束也是明智之举。所以你的逻辑(php)也应该意识到这一点,为了做到这一点,你可以使用unique validation rule:
'name' => "unique:geckos,name,NULL,id,user_id," . \Auth::user()->id