我有一個表稱爲位置哪個user_position是一個唯一的數字。如果新user_position不存在於表中或等於當前user_position,我只想更新記錄。我如何表達這樣的規則?我目前的規則不允許更新。Laravel規則更新唯一列,如果它存在
$rule=[
'user_position' => 'required|integer|unique:positions'
]
我有一個表稱爲位置哪個user_position是一個唯一的數字。如果新user_position不存在於表中或等於當前user_position,我只想更新記錄。我如何表達這樣的規則?我目前的規則不允許更新。Laravel規則更新唯一列,如果它存在
$rule=[
'user_position' => 'required|integer|unique:positions'
]
答案和更多的細節可以在這裏的文檔中找到https://laravel.com/docs/5.5/validation#rule-unique
所以下面的文檔我的規則成爲本
$rule=['user_position' => 'required|integer|unique:positions,id']
使用updateOrCreate()
方法:
$positions = Position::updateOrCreate(
['user_position' => $userPosition],
['name' => $newName, 'age' => $newAge]
);
您也可能會遇到您要更新現有的模型或者如果沒有創建新模型的情況。 Laravel提供了一個
updateOrCreate
方法來一步完成此操作。
https://laravel.com/docs/5.5/eloquent#other-creation-methods
從Docs
強制一個獨特的規則忽略一個給定的ID:
有時,你可能希望忽略一個給定的ID在獨特的檢查。 例如,考慮一個「更新配置文件」屏幕,其中包含用戶的姓名,電子郵件地址和位置 。當然,你會想要 驗證電子郵件地址是唯一的。但是,如果用戶只更改名稱字段而不更改電子郵件字段,則不希望發生 驗證錯誤,因爲用戶已經是電子郵件地址的所有者 。
以下是如何使用必需的忽略來實現此目的。
如果您使用Form Requests進行驗證,您可以這樣做。假設URL是一樣的東西/編輯和位置定位/ 1 /編輯/如果你不使用請求類進行驗證創建
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)
]
];