Laravel 5 API请求验证:修改travel_experience模型字段规则需求
调整TravelExperience模型验证规则以满足可选字段需求
要实现你需要的验证逻辑——允许city_id和country_id可选,存在时必须为有效ID且非空,不存在时保留原值——你可以使用Laravel的sometimes规则结合required和exists来实现,具体修改如下:
protected $rules = [ 'city_id' => 'sometimes|required|exists:cities,id', 'country_id' => 'sometimes|required|exists:countries,id' ];
规则详解:
sometimes:只有当请求中包含该字段时,才会应用后续的验证规则。如果请求里没有这个字段,验证会直接通过,不会触发任何检查。required:确保当字段存在时,它不能为null或空值(比如空字符串)。exists:cities,id:验证字段的值必须是cities表中id列存在的有效记录,确保关联的城市是真实存在的(country_id同理)。
为什么这能满足你的需求?
- 字段可选:如果请求中不包含
city_id或country_id,sometimes会跳过验证,模型更新时不会修改这些字段,自然保留原有的值。 - 存在时的约束:如果请求中包含了这两个字段,
required会强制它们不能为null,exists则保证ID对应的数据真实存在,完全符合你要求的“包含则不能为null且必须有效”的规则。
额外注意事项
确保你的模型更新逻辑是正确的——比如使用$model->fill($request->validated())->save()或者$model->update($request->validated()),这样只会更新请求中存在且通过验证的字段,未提交的字段会保持原值。
内容的提问来源于stack exchange,提问作者Seio. E.
相关产品推荐
相关产品推荐

