📅  最后修改于: 2023-12-03 14:50:07.159000             🧑  作者: Mango
在Laravel中,有时需要检查表格中多个列中的唯一值。虽然可以使用unique
验证规则检查单个列的唯一性,但是没有提供原生验证规则来检查多个列的唯一性。在这种情况下,您可以使用Laravel的自定义验证规则来检查表中多列唯一性。下面是一个实现这种验证的示例代码:
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
Validator::extend('unique_columns', function ($attribute, $value, $parameters, $validator) {
$query = DB::table($parameters[0])->where($parameters[1], $value)->where($parameters[2], $validator->getData()[$parameters[2]]);
if (count($parameters) > 3) {
$query->where($parameters[3], $validator->getData()[$parameters[3]]);
}
$count = $query->count();
return $count === 0;
});
代码中,我们定义了一个名为unique_columns
的自定义验证规则。该规则将接受四个参数:表名,要检查唯一性的第一个列名,要检查唯一性的第二个列名以及可选的第三列名。
规则的核心部分是以下代码行:
$query = DB::table($parameters[0])->where($parameters[1], $value)->where($parameters[2], $validator->getData()[$parameters[2]]);
此行创建一个Eloquent查询生成器,用于从指定的表中检索符合以下条件的行:
如果存在可选的第三列,它将使用类似的方式添加到查询中。
接下来,我们计算查询结果的计数,并返回true或false,具体取决于查询结果是否为0,即查询是否找到任何匹配项。
$count = $query->count();
return $count === 0;
现在可以在Laravel中使用unique_columns
自定义验证函数来检查多列验证规则。例如,以下代码将验证在users
表中的email
和name
列中是否存在带有特定值的行:
$validator = Validator::make($request->all(), [
'email' => 'required|email',
'name' => 'required',
'password' => 'required',
'confirmed_password' => 'required',
'username' => ['required', 'unique_columns:users,name,email', 'alpha_dash'],
]);
在以上示例中,unique_columns
规则是作为最后一个验证规则来调用的。此时,我们将表名作为第一个参数传递,要检查唯一性的所有列名作为后续参数传递。
希望这个示例有助于您在Laravel中检查多个列的唯一性!