我正在構建一個 API,我需要存盤一個客戶。存盤客戶后,會自動創建一個用戶。創建的用戶屬于客戶,客戶需要將user_id先前創建的用戶存盤在他的資料庫中。
我有以下代碼,我在其中使用 FormRequest 來存盤新客戶。我使用DB Transaction來保證操作的安全性。存盤用戶后,我使用 hisid關聯到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空,但是當我嘗試存盤它時,它說用戶不能為空。
uj5u.com熱心網友回復:
在 laravel 中有一個規則稱為 sometimes,它只在欄位存在時驗證。您可以像這樣在規則中使用它。
public function rules()
{
return [
'user_id' => 'sometimes|integer|exists:users,id'
];
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/536357.html
標籤:PHP拉维应用程序接口
上一篇:瀏覽器如何知道讀取資料結束
