我正在与我的团队讨论并使用Laravel框架。
验证作为关系的现有模型属性的更新需要几次数据库调用,以确保它适合约束。
我的第一个想法是创建一个自定义验证器,但是,这将需要在验证器中进行查询。一个用于获取要更新的模型,一个用于获取存在的关系,另一个用于获取将要更新的关系。该验证器也将仅用于更新该模型上的该属性。
或者,可以通过事件来验证,但是我不确定保留该验证逻辑的最佳位置。
任何建议将不胜感激。
答案 0 :(得分:1)
Laravel的自定义验证规则就是为此而制定的
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::exists('staff')->where(function ($query) {
$query->where('account_id', 1);
}),
],
]);
您可以对查询进行任何约束,只要返回至少1条记录,查询就会通过
答案 1 :(得分:0)
编辑表单验证放置名称空间App \ Http \ Requests \ Post;
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">Dashboard</div>
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
You are logged in!
</div>
</div>
</div>
</div>
</div>
@endsection
然后进入控制器
namespace App\Http\Requests\Post;
use Illuminate\Foundation\Http\FormRequest;
class EditFormValidation extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'title' => 'required | max:150 | unique:posts,title,'.$this->request->get('id'),
'description' => 'required'
];
}
public function messages()
{
return [
'title.required' => 'This filed is required.',
];
}
}