Laravel repository 求解?

假设:通过配置文件可以切换数据存储驱动,比如数据存放在 mysql,然后修改配置文件变为 redis。
目前我的伪代码如下:

1:建立一个接口

<?php

namespace App\Repositories\Interfaces;

Interface CategoryInterface
{
    public function getAll();

    public function setData();
}

2:建立两个 Repository,分别对应mysql,redis数据库操作。

<?php

namespace App\Repositories\Implement;

use App\Repositories\Interfaces\CategoryInterface;

class CategoryMysqlRepository implements CategoryInterface
{
    public function getAll()
    {
        // TODO: Implement getAll() method.
    }

    public function setData()
    {
        // TODO: Implement setData() method.
    }

}
<?php

namespace App\Repositories\Implement;

use App\Repositories\Interfaces\CategoryInterface;

class CategoryRedisRepository implements CategoryInterface
{
    public function getAll()
    {
        // TODO: Implement getAll() method.
    }

    public function setData()
    {
        // TODO: Implement setData() method.
    }

}

3:进行绑定

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind('App\Repositories\Interfaces\CategoryInterface',
            'App\Repositories\Implement\CategoryMysqlRepository');
    }
}

如何更改绑定方式,达到上述目的。谢谢。

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

通过读取数据库驱动来动态绑定,比如

 /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        // 假设key 为 database.driver, 值可能是 redis/mysql
        $dbDriver = ucfirst(config('database.driver')); 

        $this->app->bind('App\Repositories\Interfaces\CategoryInterface',
            "App\Repositories\Implement\Category{$dbDriver}Repository");
    }

供参考。

5年前 评论
讨论数量: 1

通过读取数据库驱动来动态绑定,比如

 /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        // 假设key 为 database.driver, 值可能是 redis/mysql
        $dbDriver = ucfirst(config('database.driver')); 

        $this->app->bind('App\Repositories\Interfaces\CategoryInterface',
            "App\Repositories\Implement\Category{$dbDriver}Repository");
    }

供参考。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!