Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果id相同,则Laravel验证唯一性_Php_Mysql_Validation_Laravel - Fatal编程技术网

Php 如果id相同,则Laravel验证唯一性

Php 如果id相同,则Laravel验证唯一性,php,mysql,validation,laravel,Php,Mysql,Validation,Laravel,我有一个表/模型,每个用户包含多个相册。 有没有办法说列标题应该是唯一的,但只能用于具有相同用户id的行 例如: 正如您在示例中看到的,id为2的用户创建了两个具有相同标题的相册。我不希望这被允许,这就是为什么我想知道是否有一种方法可以通过来自Laravel的验证器来否认这一点 我试过这个,但没用 // Validator $validator = Validator::make($input, [ 'title' => 'required|min:1|max:25

我有一个表/模型,每个用户包含多个相册。 有没有办法说列
标题
应该是唯一的,但只能用于具有相同
用户id的行

例如:

正如您在示例中看到的,id为2的用户创建了两个具有相同标题的相册。我不希望这被允许,这就是为什么我想知道是否有一种方法可以通过来自Laravel的验证器来否认这一点

我试过这个,但没用

// Validator
    $validator = Validator::make($input, [
        'title' => 'required|min:1|max:255|unique:galleries,title,'. Auth::user() -> id .',user_id',
        'description' => 'min:1|max:255'
    ]);

感谢您的帮助。

使用默认的
unique
规则的方法不起作用,因为该规则要求将列值作为第三个参数传递,因此在您的情况下,它将检查
title
列是否等于
Auth::user()->id
值,这不是您想要的值

您可以通过将以下代码添加到
App\Providers\AppServiceProvider
类的
boot
方法来创建自己的自定义验证规则:

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\u custom
(或者您可以随意命名)规则如下:

$validator = Validator::make($input, [
    'title' => 'required|min:1|max:255|unique_custom:galleries,title,user_id,' . Auth::id(),
    'description' => 'min:1|max:255'
]);
规则要求参数如下所示:

  • 第一个参数将作为表名,在本例中为
  • 第二个参数是字段名,该字段名应该是唯一的,其值来自用户输入,在本例中为
    标题
  • 第三个参数是将添加到查询条件的第二个字段名,在本例中为
    user\u id
  • 第四个参数是作为第三个参数传递的字段名的值
您还可以使用
Auth::id()
,因为这是
Auth::user()->id
的缩写形式



您可以在中阅读有关自定义验证规则的更多信息。

您的代码应该类似于:

'title' => 'unique:galleries,title,NULL,id,user_id,'.Auth::user() -> id.'',
或者,您可以编写自定义规则

您使用的是什么Laravel版本?我知道了,我目前正在使用5.2ah。谢谢你的解释。也很有魅力,欢迎你。而且,我似乎错误地认为,无法使用默认的
unique
规则来实现这一点。事实上,您可以传递额外的
字段
参数作为第二个条件,正如@VipindasKS在中很好地指出的。因此,这在create中可以很好地工作,但是我们应该如何为update函数自定义它?因此,在create中可以很好地工作,但是我们应该如何为update函数自定义它?