【问题标题】:The best practice to do operations on two tables from one controller Laravel PHP [closed]从一个控制器 Laravel PHP 对两个表进行操作的最佳实践 [关闭]
【发布时间】:2026-01-23 14:10:01
【问题描述】:

我想知道在一个控制器中使用两个模型是否是一种不好的做法。

我有两张表:sold 和 warehouse。

仓库包含可供出售的物品和数量,例如“键盘 XYZ”数量:195

Sold 包含来自客户的订单,例如买方:John Smith,产品:键盘 XYZ

我的问题是,在 SoldController 的一个函数中,我向已售表添加新订单,我还需要从仓库表中减去数量。

最好的方法是什么?

我读到从 SoldController 中的 WarehouseController 调用函数减量是不好的做法 - WarehouseController::subtractQuantity($id) 在 SoldController 函数中(从另一个控制器调用一个控制器的函数)

我应该在 SoldController 中使用 WarehouseModel 吗? (所以基本上在一个控制器中使用两个模型)

使用特征? (还不太熟悉)

【问题讨论】:

  • 为什么要在控制器中调用另一个控制器,只需在控制器中使用尽可能多的模型并处理不同的表

标签: php laravel model-view-controller


【解决方案1】:

您可以创建一个单独的服务类来处理您的业务逻辑中的这种横切关注点,并将该服务注入您SoldController

服务,称为SalesService,然后将执行实际销售,是否将记录添加到sold表中并从仓库中减去数量。

【讨论】:

  • 哦,谢谢,我对 Laravel 和整个后端都很陌生。但是现在我读到了服务类的目的,我认为这就是我需要的。
【解决方案2】:

在您的控制器中使用这两种模型:

namespace App\Http\Controllers;

use App\Sold;
use App\Warehouse;

class SoldController extends Controller
{
    public function __construct()
    {
      $this->middleware('auth');
    }

    public function insert()
    {
        $sold = new Sold;
        $sold->field_one = $request->field_one;
        $sold->field_two = $request->field_two;
        $sold->save();

        $warehouseItem = Warehouse::find($some_id);
        //and do the rest
    }
}

【讨论】:

  • 谢谢,我不确定是否可以在一个控制器中使用多个模型。
最近更新 更多