我在表服务器中有2列.
我有专栏ip和hostname.
我有验证:
'data.ip' => ['required', 'unique:servers,ip,'.$this->id]
Run Code Online (Sandbox Code Playgroud)
这仅适用于列ip.但是如何做到这一点hostname呢?
我想要使用列ip和hostname.验证data.ip.因为在ip和hostname列中可以重复,当用户写ip时.
Nik*_*aut 25
您可以使用它Rule::unique来实现验证规则
$messages = [
'data.ip.unique' = 'Given ip and hostname are not unique',
];
Validator::make($data, [
'data.ip' => [
'required',
Rule::unique('servers')->where(function ($query) use($ip,$hostname) {
return $query->where('ip', $ip)
->where('hostname', $hostname);
}),
],
],
$messages
);
Run Code Online (Sandbox Code Playgroud)
Leo*_*mer 13
以下将在创建上工作
'data.ip' => ['required', 'unique:servers,ip,'.$this->id.',NULL,id,hostname,'.$request->input('hostname')]
Run Code Online (Sandbox Code Playgroud)
和以下更新
'data.ip' => ['required', 'unique:servers,ip,'.$this->id.','.$request->input('id').',id,hostname,'.$request->input('hostname')]
Run Code Online (Sandbox Code Playgroud)
我假设这id是您在表中的主键。将其替换为您的环境。
唯一规则的(未记录)格式为:
表 [,列 [,忽略值 [,忽略列 [,其中列,值 ] ...]]]
可以指定多个“ where”条件,但只能检查是否相等。其他任何比较都需要使用闭包(如接受的答案中所示)。
Dil*_*ara 12
桌子
服务器
场地
ID
primary keyip
should be unique with hostname主机名
should be unique with ip
在这里,我验证了 Ip 并且主机名应该是唯一的。
use Illuminate\Validation\Rule;
$ip = '192.168.0.1';
$host = 'localhost';
Run Code Online (Sandbox Code Playgroud)
Validator::make($data, [
'ip' => [
'required',
Rule::unique('server')->where(function ($query) use($ip,$host) {
return $query->where('ip', $ip)->where('hostname', $host);
});
],
]);
Run Code Online (Sandbox Code Playgroud)
在后面添加忽略 RULE
Validator::make($data, [
'ip' => [
'required',
Rule::unique('server')->where(function ($query) use($ip,$host) {
return $query->where('ip', $ip)->where('hostname', $host);
})->ignore($serverid);
],
]);
Run Code Online (Sandbox Code Playgroud)
Hal*_*cht 10
对于表单请求:
public function rules() {
'ip' => [
'required',
Rule::unique('server')->where(function ($query) {
$query->where('ip', $this->ip)
->where('hostname', $this->host);
})
],
}
public function messages() {
return [
'ip.unique' => 'Combination of IP & Hostname is not unique',
];
}
Run Code Online (Sandbox Code Playgroud)
只需在最后添加忽略即可
public function rules() {
'ip' => [
'required',
Rule::unique('server')->where(function ($query) {
$query->where('ip', $this->ip)
->where('hostname', $this->host);
})->ignore($this->server->id)
],
}
Run Code Online (Sandbox Code Playgroud)
这对我来说既适用于创建又适用于更新。
[
'column_1' => 'required|unique:TableName,column_1,' . $this->id . ',id,colum_2,' . $this->column_2
]
Run Code Online (Sandbox Code Playgroud)
注意:在 Laravel 6 中测试。
主键(在我的情况下)是两列(name,guard_name)的组合
我通过在控制器的创建方法和更新方法(PermissionsController)上使用Rule类来验证其唯一性
PermissionsController.php
<?php
namespace App\Http\Controllers;
use App\Permission;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use App\Http\Controllers\Controller;
class PermissionsController extends Controller
{
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
request()->validate([
'name' => 'required|max:255',
'guard_name' => [
'required',
Rule::unique('permissions')->where(function ($query) use ($request) {
return $query
->whereName($request->name)
->whereGuardName($request->guard_name);
}),
],
],
[
'guard_name.unique' => __('messages.permission.error.unique', [
'name' => $request->name,
'guard_name' => $request->guard_name
]),
]);
Permission::create($request->all());
flash(__('messages.permission.flash.created'))->success();
return redirect()->route('permission.index');
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, Permission $permission)
{
request()->validate([
'name' => 'required|max:255',
'guard_name' => [
'required',
Rule::unique('permissions')->where(function ($query) use ($request, $permission) {
return $query
->whereName($request->name)
->whereGuardName($request->guard_name)
->whereNotIn('id', [$permission->id]);
}),
],
],
[
'guard_name.unique' => __('messages.permission.error.unique', [
'name' => $request->name,
'guard_name' => $request->guard_name
]),
]);
$permission->update($request->all());
flash(__('messages.permission.flash.updated'))->success();
return redirect()->route('permission.index');
}
}
Run Code Online (Sandbox Code Playgroud)
注意,在更新方法中,我添加了一个附加的查询约束[ whereNotIn('id',[$ permission-> id]) ]以忽略当前模型。
资源/ lang / en / messages.php
<?php
return [
'permission' => [
'error' => [
'unique' => 'The combination [":name", ":guard_name"] already exists',
],
'flash' => [
'updated' => '...',
'created' => '...',
],
]
]
Run Code Online (Sandbox Code Playgroud)
flash()方法来自laracasts / flash程序包。
试试这个规则:
'data.ip' => 'required|unique:servers,ip,'.$this>id.'|unique:servers,hostname,'.$this->id