【问题标题】:Laravel 5 Unique form validation ignore id / slugLaravel 5 独特的表单验证忽略 id / slug
【发布时间】:2016-01-17 15:47:49
【问题描述】:

这些是我在课堂上的规则:

class AppointmentsController extends Controller
{
    protected $rules = [
        'appointment' => ['required', 'min:5'],
        'slug'        => ['required', 'unique:appointments'],
        'description' => ['required'],
        'date'        => ['required', 'date_format:"Y-m-d H:i"'],
    ];

这是在 laravel 官方文档中:

有时,您可能希望在唯一检查期间忽略给定的 ID。 例如,考虑一个“更新配置文件”屏幕,其中包括 用户名、电子邮件地址和位置。当然,你会想要 验证电子邮件地址是否唯一。但是,如果用户只 更改名称字段而不是电子邮件字段,您不想要 验证错误被抛出,因为用户已经是所有者 电子邮件地址。你只想抛出一个验证错误,如果 用户提供了一个已被其他用户使用的电子邮件地址 用户。要告诉唯一规则忽略用户的 ID,您可以通过 ID作为第三个参数:

'email' => 'unique:users,email_address,'.$user->id.',user_id'

我尝试在我的规则中使用它:

'slug'        => ['required', 'unique:appointments,id,:id'],

这确实忽略了当前行,但它完全忽略了它。我想要完成的是,我希望它仅在 slug 未更改时才忽略当前行。当它更改为在另一行中已经是唯一的东西时,我希望它抛出错误。

【问题讨论】:

  • 试试这个方法:'slug' => ['required', 'unique:appointments,slug,:id']
  • 是的,我应该提到我试过了,没有运气。我的猜测是它应该像那样工作,所以我需要弄清楚为什么它没有。感谢您的评论:)
  • 你为什么要把它放在控制器中?它应该进入一个不能在控制器中使用的自定义请求类。不确定这是否是导致问题的原因。

标签: php laravel-5 unique rules slug


【解决方案1】:

例如,我们需要将联系信息更新到用户表中。
在我的模型用户中,我创建了这个静态方法:

static function getContactDataValidationRules( $idUserToExcept ) {
    return [
        'email' => 'required|email|max:255|unique:users,email,' . $idUserToExcept,
        'pec' => 'required|email|max:255',
        'phone' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|min:8|max:20',
        'mobile' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|min:8|max:20',
        'phone2' => 'required|regex:/^([0-9\s\-\+\(\)]*)$/|min:8|max:20',

        'recovery_email' => 'required|email|max:255',
    ];
}

在我的 UsersController 中,进入我更新用户的方法:

$id = $request->input('id');
$request->validate(User::getContactDataValidationRules( $id ));

:-)

【讨论】:

    【解决方案2】:

    Unique 验证器就是这样工作的

    unique:table,column,except,idColumn
    

    所以在你的情况下,你可以这样做:

    获取您要验证的 id,您可以从路由或任何其他适合您的方式获取它;类似的东西

    $id = $this->route('id');
    
    'slug'        => ['required','unique:appointments,slug,'.$id],
    

    【讨论】:

    • 仅供参考 - 如果您有自定义用户 id 列名(例如 'user_id' 而不是 'id'),规则将如下所示:'email' => ['required',' email','unique:user_table_name,email_col_name,'.$user->user_id .',user_id' ]
    猜你喜欢
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 2015-08-04
    相关资源
    最近更新 更多