【问题标题】:Calling one repository's function in another repository | Laravel Repository [closed]在另一个存储库中调用一个存储库的函数 | Laravel 存储库 [关闭]
【发布时间】:2025-12-14 02:00:01
【问题描述】:

我有一个名为 Business Logic Repo 的存储库,其中存储了我的函数或方法。 还有一个 Database Logic Repo,它有一个可以与数据库交互的方法。

我的问题是从数据库逻辑存储库调用函数并将其用于业务逻辑存储库的最佳方法是什么。

例如:在我的 BusinessLogicRepo 上我有这个功能

function listSelection($values){
   return $this->model->getSelection($values);
}

getSelection() 函数来自执行查询的数据库逻辑存储库。

function getSelection($tableName, $idField, $nameField){
   $query = DB::table($tableName)->select($idField,$nameField)->get();
   return $query;
}

【问题讨论】:

    标签: laravel laravel-5 eloquent repository repository-pattern


    【解决方案1】:

    在您的业务逻辑存储库中,只需创建一个构造函数调用存储库并通过 $this.... 在任何函数中使用它。

    class BusinessLogicRepositor extends BaseRepository
    {
     public $databaselogicRepo;
    
     function __construct()
     {
       $this->databaselogicRepo = new DatabaseLogicRepository();
     }
     public function example()
     {
      $data = [
            'name' =>'abc',
            'phone' => '123456'
      ];
      $data_id  = $this->databaselogicRepo->save($data);
     }
    
    }
    

    【讨论】:

      【解决方案2】:

      在 BusinessLogicRepo 中,您需要在构造函数中绑定 DatabaseLogicRepository,如下所示:

      class BusinessLogicRepo
      {
      
          private $_databaseLogicRepository;
      
          public function __construct(DatabaseLogicRepository $databaseLogicRepository) 
          {
              $this->_databaseLogicRepository = $databaseLogicRepository;
          }
      
          public function listSelection($values)
          {
             return $this->_databaseLogicRepository->getSelection($values);
          }
      }
      

      【讨论】:

      • 我应该把构造函数放在哪里来将模型绑定到存储库。因为我把我的模型变成了一个通用的模型。其中它可以被任何模型使用。
      • 在DatabaseLogicRepository中你可以把构造函数绑定模型。