首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的雄辩的模特在升级到Laravel 8之后不省钱呢?

为什么我的雄辩的模特在升级到Laravel 8之后不省钱呢?
EN

Stack Overflow用户
提问于 2022-01-18 04:28:46
回答 1查看 126关注 0票数 0

需要帮助才能摆脱杂草。我有一个Laravel应用程序,这个应用程序是从4.2开始的,我每隔几年就升级一次,每隔几年升级一次。我白天是.NET开发人员,但继续维护这个应用程序。不管怎样..。

我从Laravel6.x升级到8.x,并开始使用Docker。我把所有的东西都部署到我的生产环境中,而且大多数事情都在工作。我做了一些简单的测试,而且必须承认,我没有对所有的东西都进行测试,但是一些随机的代码部分实际上并没有将记录保存到数据库中。太奇怪了。我已经进行了几天的故障排除,这就是我现在遇到的问题:

8

  • MariaDB

  • Laravel environment

  • Tinker允许我创建/更新/删除记录,无需使用雄辩的

  • ,有些东西可以在生产环境中保存(这是使用MySql)

您可能会对数据库之间的差异感到好奇,我使用的是M1 Mac,而且还没有对MySql Docker映像的M1支持。据我所知,Mariadb是一个插入式替代品。

这是我今晚写的代码,试图简化我在6-7年前写的一些非常古老的意大利面代码……现在也不比现在好,但请你对我放松点。最终,我只是从一个角度的前端进入4个数组,我正在迭代、创建/更新记录,然后将所有内容都传递回浏览器。

我不明白的是,它都表示保存,它在数据库中的表中增加了PKs,我用新分配的PKs返回了完整的模型.但它只是没有保存在数据库中。所有的失败都是完全无声的,我在vscode中使用xdebug调试时没有发现任何日志,也没有问题,没有sql日志,雄辩的模型说,无论是创建还是更新,它都是成功的。是的,似乎没有任何东西在存钱。

但我可以把所有完全相同的数据用修补程序运行,这样保存得很好.我真的很想知道我错过了什么。在我雄辩的模型类中,在400人对$primaryKey属性做出回应之前,我肯定已经检查了这一百万次(或者至少现在感觉是这样)。

代码语言:javascript
复制
/**
     * Replaces UploadInvoice()
     * Saves from editing an invoice.
     *
     * @param Request $request
     *
     * @return JsonResponse
     */
    public function saveApiInvoice(Request $request): JsonResponse
    {
        $result = new OpResult();
        DB::beginTransaction();

        try {
            $this->deletePendingInvoiceItems($request['pendingDeletes']);
            $sales = $this->saveSaleRecords($request)->getData();
            $overrides = $this->saveOverrideRecords($request)->getData();
            $expenses = $this->saveExpenseRecords($request)->getData();

            $payroll = $this->savePayrollInfo($request, $sales, $overrides, $expenses)->getData();

            $this->paystubService->processPaystubJob($request['issueDate']);

            return $result->setData([
                'sales' => $sales,
                'overrides' => $overrides,
                'expenses' => $expenses,
                'payroll' => $payroll
            ])->getResponse();
            
        } catch (\Exception $ex) {
            DB::rollBack();

            return $result->setToFail($ex)
                ->getResponse();
        }
    }

private function savePayrollInfo($request, $sales, $overrides, $expenses)
    {
        $result = new OpResult();
        $total = 0;

        foreach ($sales as $sale) {
            $total += $sale['amount'];
        }

        foreach ($overrides as $override) {
            $total += $override['total'];
        }

        foreach ($expenses as $expense) {
            $total += $expense['amount'];
        }

        $payroll = Payroll::agentId($request['agentid'])
            ->vendor($request['vendorId'])
            ->payDate($request['issueDate'])
            ->first();

        if ($payroll != null) {
            $payroll->amount = $total;
        } else {
            $agent = Employee::find($request['agentid']);

            $payroll = new Payroll([
                'agent_id' => $request['agentId'],
                'agent_name' => $agent != null ? $agent->name : '',
                'amount' => $total,
                'is_paid' => false,
                'vendor_id' => $request['vendorId'],
                'pay_date' => $request['issueDate']
            ]);
        }

        $saved = $payroll->save();

        return $result->setStatus($saved)
            ->setDataOnSuccess($payroll);
    }

    private function saveExpenseRecords($request)
    {
        $result = new OpResult();
        $expenses = [];

        foreach ($request['expenses'] as $e) {
            $expense = new Expense([
                'vendor_id' => $request['vendorId'],
                'type' => $e['type'],
                'notes' => $e['notes'],
                'amount' => is_numeric($e['amount']) ? $e['amount'] + 0 : 0,
                'agentid' => $request['agentId'],
                'issue_date' => $request['issueDate'],
                'wkending' => $request['weekending']
            ]);

            $save_success = $expense->save();

            if ($save_success) {
                $expenses[] = $expense;
            }
        }

        return $result->setDataOnSuccess($expenses);
    }

    private function saveOverrideRecords($request)
    {
        $result = new OpResult();
        $overrides = [];

        foreach ($request['overrides'] as $o) {
            $override = new Override([
                'vendor_id' => $request['vendorId'],
                'name' => $o['name'],
                'sales' => $o['sales'],
                'commission' => is_numeric($o['commission']) ? $o['commission'] + 0 : 0,
                'total' => is_numeric($o['total']) ? $o['total'] + 0 : 0,
                'agentid' => $request['agentId'],
                'issue_date' => $request['issueDate'],
                'wkending' => $request['weekending']
            ]);

            $save_success = $override->save();

            if ($save_success) {
                $overrides[] = $override;
            }
        }

        return $result->setDataOnSuccess($overrides);
    }

    private function saveSaleRecords($request)
    {
        $result = new OpResult();

        $sales = [];
        foreach ($request['sales'] as $invoice) {
            $sale = new Invoice([
                'vendor' => $request['vendorId'],
                'sale_date' => Carbon::parse($invoice['saleDate'])->format('Y-m-d'),
                'first_name' => $invoice['firstName'],
                'last_name' => $invoice['lastName'],
                'address' => $invoice['address'],
                'city' => $invoice['city'],
                'status' => $invoice['status'],
                'amount' => is_numeric($invoice['amount']) ? $invoice['amount'] + 0 : 0,
                'agentid' => $request['agentId'],
                'issue_date' => $request['issueDate'],
                'wkending' => $request['weekending']
            ]);

            $save_success = $sale->save();

            if ($save_success) {
                $sales[] = $sale;
            }
        }

        return $result->setDataOnSuccess($sales);
    }
    
    private function deletePendingInvoiceItems($pending_deletes)
    {
        if (isset($pending_deletes['sales']) && count($pending_deletes['sales']) > 0) {
            Invoice::destroy($pending_deletes['sales']);
            $sales_ids = [];
            foreach ($pending_deletes['sales'] as $key => $value) {
                $sales_ids[] = $value['invoiceId'];
            }

            DB::table('invoices')->whereIn('invoice_id', $sales_ids)->delete();
        }

        if (isset($pending_deletes['overrides']) && count($pending_deletes['overrides']) > 0) {
            $override_ids = [];
            foreach ($pending_deletes['overrides'] as $key => $value) {
                $override_ids[] = $value['overrideId'];
            }

            DB::table('overrides')->whereIn('ovrid', $override_ids)->delete();
        }

        if (isset($pending_deletes['expenses']) && count($pending_deletes['expenses']) > 0) {
            $expense_ids = [];
            foreach ($pending_deletes['expenses'] as $key => $value) {
                $expense_ids[] = $value['expenseId'];
            }

            DB::table('expenses')->whereIn('expid', $expense_ids)->delete();
        }
    }```
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-18 05:52:05

在返回结果之前,您需要在DB::commit();函数中的try{}块末尾添加try{},从而提交DB事务。

代码语言:javascript
复制
public function saveApiInvoice(Request $request): JsonResponse
    {
        $result = new OpResult();
        DB::beginTransaction();

        try {
            $this->deletePendingInvoiceItems($request['pendingDeletes']);
            $sales = $this->saveSaleRecords($request)->getData();
            $overrides = $this->saveOverrideRecords($request)->getData();
            $expenses = $this->saveExpenseRecords($request)->getData();

            $payroll = $this->savePayrollInfo($request, $sales, $overrides, $expenses)->getData();

            $this->paystubService->processPaystubJob($request['issueDate']);

            DB::commit(); // <--- Missing commit

            return $result->setData([
                'sales' => $sales,
                'overrides' => $overrides,
                'expenses' => $expenses,
                'payroll' => $payroll
            ])->getResponse();
            
        } catch (\Exception $ex) {
            DB::rollBack();

            return $result->setToFail($ex)
                ->getResponse();
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70750298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档