如何在Laravel中实现一个控制器内的两个事务服务

jgovgodb  于 2022-12-01  发布在  其他
关注(0)|答案(1)|浏览(187)

我有两个模型X和Y。对于这些模型,我还有一个服务和存储库。
其结构为:

| App
|| Http
||| Controller
|||| XController
|||| YController.php

| Service
|| XService.php
|| YService.php

| Repository
|| XRepository.php
|| YRepository.php

现在我有了第三个控制器Z(与模型断开)。

| App
|| Http
||| Controller
|||| XController
|||| YController.php
|||| ZController.php <!--- THIS

| Service
|| XService.php
|| YService.php

| Repository
|| XRepository.php
|| YRepository.php

在ZController中,我必须通过两个服务(XService和YService)调用create方法。

class ZController extends Controller
{
    protected XService $XService;
    protected YService $YService;

    public function __construct(XService $XService, YService $YService)
    {
        $this->XService = $XService;
        $this->YService = $YService;
    }

    public function store(Request $request): JsonResponse
    {
        $x = $this->XService->create();
        $y = $this->YService->create();
    }
}

我遇到的问题是:如果$y的服务失败(异常),我还必须删除$x的插入。2如果我输入DB::transaction,当它是一个移植到其他事务的事务时,它会产生一个错误。3我可以应用什么解决方案?
另外,try catch可以在仓库或服务中应用吗?或者在特定情况下同时应用?

ioekq8ef

ioekq8ef1#

PHP不支持多重继承,但通过使用PHP中的接口或使用PHP中的特性而不是类,Laravel也是如此,如果你不想通过制作仓库,那么你可以使用简单的特性来完成任务。

相关问题