是否需要从当前调用另一个控制器的功能?这是正确的方法吗?

时间:2019-05-28 07:08:09

标签: laravel api laravel-5.7

我为我的学术项目设置了新的laravel 5.7。我想使用Laravel制作药物提醒项目。 为此,我有2个表:

  1. 用户
  2. 医学

我有用于用户和医学的模型和控制器。

  • 控制器

    1. MedicineController
    2. UserController
    3. MedUserController
  • 模型

    1. 用户
    2. 医学
    3. Med_User

在模型中,用户和医学具有多对多关系。为了维护“多对多”,我有一个链接表User_Medicine,其中包含两个父表的外键。

现在在控制器中,用户添加了药品详细信息,应用程序应检查药品是否已在数据库中。如果药物已经存在,则应用程序应在链接表中为其分配med_id和user_id。但是,如果数据库应用程序中不存在药物,则应添加新的药物详细信息。此过程是用MedUserController编写的。

现在的问题是,我具有在MedicineController @ store中添加药物的功能。我想从当前控制器(MedUserController)中重用该功能。

什么是最好的方法?请提出建议。

1 个答案:

答案 0 :(得分:0)

控制器旨在详细说明输入并提供响应对象。话虽这么说,但是从另一个控制器调用一个控制器是一个坏习惯。

在您的情况下,应使用Repository Pattern处理此问题,这意味着您有一个负责从数据库创建/检索对象的类,并且可以从任何控制器/类调用它。

这是我会做的事的根源

public function controllerAction() {
    $user = Auth::user();
    $medicineData = request()->all();
    $medicine = $this->medicineRepository->store($medicineData);
    $user->medicines()->attach($medicine);
}

在存储库的store方法中,您可以检查药物是否已经存在或是新药物,并且始终返回一个Medicine对象。

相关问题