创建用户时,我希望laravel nova中的adhar_number,phone_number和电子邮件是唯一的。
我尝试执行以下操作,
public function fields(Request $request)
{
return [
ID::make()->sortable(),
Text::make('Adhaar Number')->rules('required'),
Text::make('Phone Number')->rules('required'),
Text::make('Email')->rules('max:255', 'required')
->creationRules('unique:users,adhaar_number,phone_number,email'),
];
}
上面的字段定义给出了一条成功消息,表明已创建资源,但是应该产生错误消息。它在日志文件中记录重复条目错误。
[据我所知,您想验证“电子邮件”与先前提供的两个输入一并是唯一的...我想像需要使用神奇的fillUsing()
方法以及手册Validator
!^ _ ^
/* *_create_users_table.php (Migration) */
...
$table->unique(['adhaar_number', 'phone_number', 'email']);
/* User.php (Nova Resource) */
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
...
Text::make('Adhaar Number', 'adhaar_number')
...,
Text::make('Phone Number', 'phone_number')
...,
Text::make('Email', 'email')
... // exclude the unique rule for now
->fillUsing(function ($request, $model, $attribute, $requestAttribute) {
if ($request->exists($requestAttribute)) {
if ($request->method() === 'POST') {
// Upon creation
$validator = Validator::make($request->all(), [
'email' => [
Rule::unique('users', 'email')
->where(function ($query) {
return $query
->where('adhaar_number', $request['adhaar_number'])
->where('phone_number', $request['phone_number']);
}),
],
]);
} elseif ($request->method() === 'PUT') {
// Upon update
$validator = Validator::make($request->all(), [
'email' => [
Rule::unique('users', 'email')
->where(function ($query) {
return $query
->where('adhaar_number', $request['adhaar_number'])
->where('phone_number', $request['phone_number']);
})
->ignore(
$model
->where('adhaar_number', $request['adhaar_number'])
->where('phone_number', $request['phone_number'])
->pluck('id')->first()
),
],
]);
}
$validator->validate();
}
}),