Laravel请求验证:仅对特定值校验数据库条目存在性
解决方案
一、完善请求验证规则
在你的BasicRequest类中,为relation字段添加条件校验逻辑,当值不等于-1时,验证其是否存在于relations表的name字段中。这里提供两种实现方式:
方式1:使用Laravel内置规则组合
use Illuminate\Validation\Rule; public function rules() { return [ 'relation' => [ 'required', Rule::when($this->relation != -1, ['exists:relations,name']), ], ]; }
方式2:自定义闭包验证(支持自定义错误提示)
public function rules() { return [ 'relation' => [ 'required', function ($attribute, $value, $fail) { if ($value != -1 && !\App\Models\Relation::where('name', $value)->exists()) { $fail('所选的关系不存在于数据库中'); } }, ], ]; }
二、过滤other选项不存入数据库
可以在请求类或控制器中处理,确保值为-1的relation字段不被写入数据库:
方式1:在请求类中预处理
protected function prepareForValidation() { if ($this->input('relation') == -1) { // 移除该字段,或设为null(根据你的数据库字段规则选择) $this->request->remove('relation'); // 若字段允许为null,也可使用:$this->merge(['relation' => null]); } }
方式2:在控制器中处理验证后的数据
public function store(BasicRequest $request) { $validatedData = $request->validated(); // 过滤掉值为-1的relation字段 if ($validatedData['relation'] == -1) { unset($validatedData['relation']); } // 执行数据库存储操作 YourModel::create($validatedData); // 后续逻辑... }
内容的提问来源于stack exchange,提问作者Alaksandar Jesus Gene
相关产品推荐
相关产品推荐

