我正在构建一个API,我需要存储一个客户。当存储客户时,会自动创建一个用户。创建的用户属于客户,客户需要在其数据库中存储先前创建的user_id
。
在下面的代码中,我使用FormRequest来存储一个新的Customer。我使用DB Transaction来确保操作的安全性。在我存储User之后,我使用他的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
可为空,但当我尝试存储它时,它说用户不能为空。
1条答案
按热度按时间1zmg4dgp1#
在laravel中有一个规则叫做sometimes,它只验证字段是否存在。你可以在规则中使用它,比如。