12 php unique rule laravel laravel-validation
我在更新部分中有唯一的验证规则.
在插入或添加唯一规则时'Email' => array('unique:driver_details'),,它将检查唯一的coloumn.
但是更新部分失败了.虽然更新它满足其他规则,并且在电子邮件的唯一中它会检查自己的唯一coloumn并且它会失败但看到自己的字段.
那么,我如何检查数据库中除了自己的值之外的唯一?
use*_*582 25
这会强制忽略特定的id:
'email' => 'unique:table,email_column_to_check,id_to_ignore'
Run Code Online (Sandbox Code Playgroud)
替换段table,email_column_to_check,id_to_ignore在上述的例子
你可以在这里查看http://laravel.com/docs/4.2/validation#rule-unique
Ari*_*sta 12
对于使用Laravel 5和Form Requests的用户,您可以直接将Route-Model Binding模型的id作为Form Request的属性获取,$this->name_of_the_model->id然后使用它从唯一规则中忽略它.
例如,如果您想拥有唯一的电子邮件,但也允许管理员编辑用户,您可以执行以下操作:
路线:
Route::patch('users/{user}', 'UserController@update');
Run Code Online (Sandbox Code Playgroud)
控制器:
public function update(UserRequest $request, User $user)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
表格要求:
class UserRequest extends FormRequest
{
// ...
public function rules()
{
return [
'name' => 'required|string',
'email' => [
'required',
'email',
Rule::unique('users')->ignore($this->user->id, 'id')
],
//...
];
}
//...
}
Run Code Online (Sandbox Code Playgroud)
请注意,我们忽略了正在编辑的用户,在这种情况下,用户可能与经过身份验证的用户不同.
小智 12
$request->validate([
'email' => 'unique:table_name,email,' . $user->id
]);
Run Code Online (Sandbox Code Playgroud)
小智 7
通过书写包含规则
use Illuminate\Validation\Rule;
Run Code Online (Sandbox Code Playgroud)
并编写您的验证代码如下:
'Email' => [required,
Rule::unique('driver_details')->ignore($id),
]
Run Code Online (Sandbox Code Playgroud)
这里 $id 是您在验证期间要忽略的电子邮件的 ID,它是从控制器获取的。
我正在使用 Laravel 5.2
如果您的主键名为 'id' 表名是 users_table 并且我想更新 user_name 所以我这样做
'user_name' => 'required|unique:users_table,user_name,'.$id
Run Code Online (Sandbox Code Playgroud)
如果您的主键未命名为 'id' 在我的情况下,我的主键是 user_id,表名是 users_table,我想更新 user_name
所以我这样做
'user_name' => 'required|unique:users_table,user_name,'.$id.',user_id'
Run Code Online (Sandbox Code Playgroud)
这花了我一段时间才弄清楚,但是当您处理更新/创建请求时,您还可以访问请求对象。在这里,我强制客户端名称是唯一的,但允许当前编辑的客户端。
class CreateUpdateClientRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => [
'required',
'string',
'min:3',
'max:50',
Rule::unique('clients')->ignore($this->request->get('id'))
],
'primary_contact_name' => 'required|string|min:3|max:50',
'primary_contact_email' => 'required|string|email|min:5|max:50',
'primary_contact_phone' => 'nullable|string|min:5|max:50',
'secondary_contact_name' => 'nullable|string|min:3|max:50',
'secondary_contact_email' => 'nullable|string|email|min:5|max:50',
'secondary_contact_phone' => 'nullable|string|min:5|max:50',
'notes' => 'nullable'
];
}
}
Run Code Online (Sandbox Code Playgroud)
在 Laravel 6 应用程序中,它帮助我从验证中排除当前用户的电子邮件:
use Illuminate\Validation\Rule;
public function update(Request $request, $id)
{
$request->validate([
'email' => [
'email',
'required',
Rule::unique('claims')->ignore($id),
],
]);
// ...
}
Run Code Online (Sandbox Code Playgroud)
尝试这个
'email' => 'unique:table_name,column_name,'.$this->id.',id'
Run Code Online (Sandbox Code Playgroud)
$this->id 将是您请求的价值
小智 5
检查这个,
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
Run Code Online (Sandbox Code Playgroud)
在此处查看https://laravel.com/docs/7.x/validation#rule-unique。
| 归档时间: |
|
| 查看次数: |
20450 次 |
| 最近记录: |