我正在構建一個API,我需要存儲一個客戶。存儲客戶后,將自動創建用戶。創建的用戶屬于客戶,客戶需要在其數據庫中存儲之前創建的user_id
。
在使用FormRequest存儲新客戶時,我有以下代碼。我使用DB事務來確保操作的安全性。存儲用戶后,我使用他的id
關聯到Customer請求中的字段user_id
。
public function store(StoreCustomerRequest $request)
{
/* --- DB Transaction -> Create User + Customer --- */
DB::transaction(function () use ($request) {
// -> Creates User
$create_user = (new UserController)->store($request);
// -> Creates Customer
$request->merge(['user_id' => $create_user->id]);
$customer = Customer::create($request->validated());
return new CustomerResource($customer);
});
}
StoreCustomerRequest
具有以下規則。
public function rules()
{
return [
'user_id' => 'required|integer|exists:users,id',
'phone' => 'required|min:0|max:20',
'points' => 'required|min:0',
'nif' => 'nullable|digits:9',
'default_payment_type' => 'nullable|in:VISA,PAYPAL,MBWAY',
'default_payment_reference' => 'nullable',
'custom' => 'nullable'
];
}
當我嘗試存儲一個新客戶時,字段user_id
變為空(因為沒有要關聯的用戶)。因此,出現了一個錯誤:“需要用戶id字段”。
問題是:我如何繞過此驗證并將客戶與之前創建的user_id
存儲在一起?
我已經嘗試更改StoreCustomerRequest
中的規則,并使user_id
為空,但當我嘗試存儲它時,它表明用戶不能為空。
laravel中有一個規則有時被調用,它僅在字段存在時才有效。你可以這樣在規則中使用它。