Laravel验证:唯一规则第4个参数


Laravel validation: unique rule 4th parameter

浏览Laravel文档,API文档和源代码,我想知道是否有人知道以下唯一规则中的第4个参数id是做什么的?

'email' => 'unique:users,email_address,NULL,id,account_id,1'

我目前对这条规则的理解是:

  • users - 查看此表
  • email_address - 检查此列
  • NULL - 我们可以指定要忽略的主键/ID 值,但我们没有打扰,所以这个参数基本上被忽略
  • id - 不确定
  • account_id - 附加 where 子句,这是列名
  • 1 - where 子句中account_id的值

文档:http://laravel.com/docs/4.2/validation

负责执行在线949函数validateUnique($attribute, $value, $parameters) 'Illuminate'Validation'Validator中发现的唯一规则验证的函数:

/**
 * Validate the uniqueness of an attribute value on a given database table.
 *
 * If a database column is not specified, the attribute will be used.
 *
 * @param  string  $attribute
 * @param  mixed   $value
 * @param  array   $parameters
 * @return bool
 */
protected function validateUnique($attribute, $value, $parameters)
{
    $this->requireParameterCount(1, $parameters, 'unique');
    $table = $parameters[0];
    // The second parameter position holds the name of the column that needs to
    // be verified as unique. If this parameter isn't specified we will just
    // assume that this column to be verified shares the attribute's name.
    $column = isset($parameters[1]) ? $parameters[1] : $attribute;
    list($idColumn, $id) = array(null, null);
    if (isset($parameters[2]))
    {
        list($idColumn, $id) = $this->getUniqueIds($parameters);
        if (strtolower($id) == 'null') $id = null;
    }
    // The presence verifier is responsible for counting rows within this store
    // mechanism which might be a relational database or any other permanent
    // data store like Redis, etc. We will use it to determine uniqueness.
    $verifier = $this->getPresenceVerifier();
    $extra = $this->getUniqueExtra($parameters);
    return $verifier->getCount(
        $table, $column, $value, $id, $idColumn, $extra
    ) == 0;
}

干杯

啊,坚果,我想一分钱刚刚掉下来。

如果我错了,请纠正我,但第 4 个参数与第 3 个参数相关,因为它允许我们在忽略 3 中指定的 ID 时指定要检查的列。如果不是id.

例如,如果主键未id而是user_id,我们可以这样做:

'email' => 'unique:users,email_address,NULL,user_id,account_id,1'
  • $ARG 1 - 查看此表
  • $ARG 2 - 对照此列进行检查。默认为验证密钥(等式:电子邮件)
  • $ARG 3 - 附加值。
  • $ARG 4 - 附加位置 NOT 字段。默认为主键
  • $ARG 5 - 附加位置
  • 字段 1 - 附加位置值。

你是对的,第 4 个参数是 id 的列名,如果与"id"不同,如下所示:

https://github.com/laravel/framework/blob/4.2/src/Illuminate/Validation/Validator.php#L991