我有一个名为position的表,其中user_position是唯一的数字。如果表中不存在新的user_position或者等于当前的user_position,我只想更新记录。我该如何表达这样的规则?我目前的规则不允许更新。
$rule=[
'user_position' => 'required|integer|unique:positions'
]
答案 0 :(得分:0)
使用updateOrCreate()
方法:
$positions = Position::updateOrCreate(
['user_position' => $userPosition],
['name' => $newName, 'age' => $newAge]
);
您可能还会遇到要更新现有模型或创建新模型(如果不存在)的情况。 Laravel提供
updateOrCreate
方法,只需一步即可完成此操作。
https://laravel.com/docs/5.5/eloquent#other-creation-methods
答案 1 :(得分:0)
答案和详细信息可以在https://laravel.com/docs/5.5/validation#rule-unique
的文档中找到因此遵循文档我的规则就变成了
$rule=['user_position' => 'required|integer|unique:positions,id']
答案 2 :(得分:0)
来自Docs
强制使用唯一规则忽略给定ID:
有时,您可能希望在唯一检查期间忽略给定的ID。 例如,考虑一个"更新配置文件"屏幕包括 用户的姓名,电子邮件地址和位置。当然,你会想要的 验证电子邮件地址是否唯一。但是,如果只是用户 更改名称字段而不是电子邮件字段,您不需要 要抛出验证错误,因为用户已经是其所有者 电子邮件地址。
以下是使用必需忽略实现此目的的方法。
如果您使用Form Requests进行验证,则可以执行此类操作。假设url类似于/ positions / 1 / edit进行编辑和position / create
use Illuminate\Validation\Rule;
....
public function rules()
{
//position id
$id = $this->route()->parameter('position'));
//or like this if id is in parameter as 2nd segment
//$id = $this->segment(2);
return [
'user_position' => [
'required',
Rule::unique('positions')->ignore($id)
]
];
}
如果您没有使用请求类进行验证
//get id of parameter positions
//using Illuminate\Http\Request $request;
$id = $request->route()->parameter('position'));
//or using helper
// $id = request()->route()->parameter('position'));
$rule=[
'user_position' => [
'required',
Rule::unique('positions')->ignore($id)
]
];