hasOne 一对一的创建接口,Api前后端分离开发中,你们是分成两个接口设计还是一个接口判断
我目前是这样子的,在一个接口中通过判断来进行create还是update
但是有一种感觉这样不太合理,不知道是否有必要分成store和update
class PayeeInformationController extends Controller
{
public function store(PayeeInformationRequest $request): PayeeInformationResource
{
$user = auth()->user();
$data = [
'name' => $request->name,
'qq' => $request->qq,
'wx' => $request->wx,
'bank' => $request->bank,
'bank_branch' => $request->bank_branch,
'card_number' => $request->card_number,
'alipay_account' => $request->alipay_account,
'alipay_qrcode' => $request->alipay_qrcode,
'wx_qrcode' => $request->wx_qrcode,
];
if(!$user->payeeInformation) { // 通过属性来判断,你们有没有更好的办法
$payeeInformation = $user->payeeInformation()->create($data);
}else {
$user->payeeInformation->fill($data);
$user->payeeInformation->save();
$payeeInformation = $user->payeeInformation;
}
return new PayeeInformationResource($payeeInformation);
}
}
// 保存用户收款信息
Route::post('payee_information', [PayeeInformationController::class, 'store'])->name('payee_information.store');
// 接口因为是当前用户获取的,没有传ID感觉有点奇怪
Route::get('payee_information', [PayeeInformationController::class, 'show'])->name('payee_information.show');
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Requests\Api\PayeeInformationRequest;
use App\Http\Resources\PayeeInformationResource;
use App\Models\User;
class PayeeInformationController extends Controller
{
public function store(PayeeInformationRequest $request): PayeeInformationResource
{
$user = auth()->user();
$data = [
'name' => $request->name,
'qq' => $request->qq,
'wx' => $request->wx,
'bank' => $request->bank,
'bank_branch' => $request->bank_branch,
'card_number' => $request->card_number,
'alipay_account' => $request->alipay_account,
'alipay_qrcode' => $request->alipay_qrcode,
'wx_qrcode' => $request->wx_qrcode,
];
if(!$user->payeeInformation()->exists()) {
$payeeInformation = $user->payeeInformation()->create($data);
}else {
$user->payeeInformation->update($data);
$payeeInformation = $user->payeeInformation;
}
return new PayeeInformationResource($payeeInformation);
}
public function show(Request $request): PayeeInformationResource
{
$user = auth()->user();
if(!$user->payeeInformation()->exists()) {
// 没有对应的收款信息的时候,直接返回404,你们是怎么做的,类似这种情况有没有更好的办法
abort(404, '收款信息还未创建');
}else {
return new PayeeInformationResource($request->user()->payeeInformation);
}
}
}
可以用updateOrCreate这个方法处理,具体可以参考文档部分 快速入门《Laravel 9 中文文档》
当然有必要,既然自己都感觉不合理了,还不分吗。
没必要分,分了之后,相当于你把原子性操作交给前端了。
我是分开做的 create:
update:
清晰明了
hasone的情况下,如果用户对应的信息找不到你们是不是直接404