从一个控制器对两个表进行操作的最佳实践 Laravel PHP

The best practice to do operations on two tables from one controller Laravel PHP

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

我有两个table:sold 和 warehouse。

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

已售出包含来自客户的订单,例如买家:John Smith,产品:键盘 XYZ

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

最好的方法是什么?

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

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

使用特质? (还不是很熟悉)

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

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

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

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
    }
}