我有一个表/模型,每个用户包含多个相册。
有没有办法说列userData.getUserData(function(response) {
$scope.uid = response
});
应该是唯一的,但只适用于具有相同title
的行?
示例:http://pastebin.com/8dvM4a1T
正如您在示例中所看到的,ID为2的用户创建了2个具有相同标题的专辑。我不希望这被允许,这就是为什么我想知道是否有办法用Laravel的验证器否认这一点?
我试过这个,但那没用。
user_id
感谢任何帮助,谢谢。
答案 0 :(得分:6)
使用默认unique
规则的方法不起作用,因为规则要求将列值作为第三个参数传递,因此在您的情况下,它将检查title
列是否等于Auth::user()->id
值不是您想要的值。
您可以通过将以下代码添加到boot
类的App\Providers\AppServiceProvider
方法来创建自己的自定义验证规则:
Validator::extend('unique_custom', function ($attribute, $value, $parameters)
{
// Get the parameters passed to the rule
list($table, $field, $field2, $field2Value) = $parameters;
// Check the table and return true only if there are no entries matching
// both the first field name and the user input value as well as
// the second field name and the second field value
return DB::table($table)->where($field, $value)->where($field2, $field2Value)->count() == 0;
});
现在您可以使用unique_custom
(或者您可以随意命名)规则如下:
$validator = Validator::make($input, [
'title' => 'required|min:1|max:255|unique_custom:galleries,title,user_id,' . Auth::id(),
'description' => 'min:1|max:255'
]);
规则要求参数如下:
galleries
title
user_id
此外,您可以使用Auth::id()
,因为这是Auth::user()->id
的缩写形式。
答案 1 :(得分:6)
您的代码应该是:
'title' => 'unique:galleries,title,NULL,id,user_id,'.Auth::user() -> id.'',
或者,您可以编写自定义规则 Reference here