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);
        }
    }
}
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 8
gongmeng

可以用updateOrCreate这个方法处理,具体可以参考文档部分 快速入门《Laravel 9 中文文档》

1年前 评论

当然有必要,既然自己都感觉不合理了,还不分吗。

1年前 评论

没必要分,分了之后,相当于你把原子性操作交给前端了。

1年前 评论
深蓝色 (楼主) 1年前

我是分开做的 create:

$user = User::create([]);
$user->payeeInformation()->create([]);

update:

$user = auth()->user();
$user->update($request->only([]));
$user->payeeInformation->update($request->only([]));

清晰明了

1年前 评论
深蓝色 (楼主) 1年前
chenxiang (作者) 1年前

hasone的情况下,如果用户对应的信息找不到你们是不是直接404

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!