📜  laravel 8 验证唯一 2 列 - PHP (1)

📅  最后修改于: 2023-12-03 14:43:44.464000             🧑  作者: Mango

Laravel 8 验证唯一 2 列 - PHP

本文将为你介绍在 Laravel 8 中如何进行验证唯一性的操作,并且涉及到使用两列进行验证的情况。

1. 验证唯一性

在许多应用程序开发中,我们经常需要验证某个值在数据库的某一列中是否是唯一的。Laravel 提供了 unique 规则来实现这个功能。

基本用法

以下是验证唯一性的基本用法:

$request->validate([
    'column_name' => 'unique:table_name',
]);

其中,column_name 是要验证的列的名称,table_name 是要验证的数据库表的名称。

忽略指定 ID

有时候我们需要在验证唯一性时,忽略指定 ID 对应的记录。你可以使用 ignore 方法来实现:

$request->validate([
    'column_name' => 'unique:table_name,column_name,' . $id,
]);

$id 是要忽略的记录的 ID。

2. 验证两列的唯一性

在某些情况下,我们需要同时验证两个列的唯一性。Laravel 并没有提供直接的方法来实现这个功能,但我们可以通过自定义验证规则来解决。

自定义验证规则

首先,我们需要创建一个自定义验证规则。打开终端并执行以下命令来生成一个规则类:

php artisan make:rule UniqueTwoColumns

接下来,编辑生成的 UniqueTwoColumns 类文件,内容如下:

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class UniqueTwoColumns implements Rule
{
    protected $table;
    protected $column1;
    protected $column2;

    public function __construct($table, $column1, $column2)
    {
        $this->table = $table;
        $this->column1 = $column1;
        $this->column2 = $column2;
    }

    public function passes($attribute, $value)
    {
        $count = \DB::table($this->table)
            ->where($this->column1, $value)
            ->orWhere($this->column2, $value)
            ->count();

        return $count === 0;
    }

    public function message()
    {
        return 'The :attribute has already been taken.';
    }
}
使用自定义规则

现在我们可以在验证规则中使用自定义规则 UniqueTwoColumns。以下是使用自定义规则验证两列唯一性的示例:

$request->validate([
    'column1_name' => ['string', 'required', new \App\Rules\UniqueTwoColumns('table_name', 'column1_name', 'column2_name')],
    'column2_name' => ['string', 'required'],
]);

其中,column1_namecolumn2_name 是要验证的两个列的名称,table_name 是要验证的数据库表的名称。

总结

通过使用 Laravel 的 unique 规则和自定义规则,我们可以方便地验证某个值在数据库中的某一列或两列中是否唯一。这种验证方法可以帮助我们确保数据的准确性和唯一性,在应用程序开发中非常有用。

以上就是关于在 Laravel 8 中验证唯一性且涉及两列的介绍。希望对你有所帮助!