- 浏览: 61969 次
- 性别:
- 来自: 广州
-
文章分类
最新评论
lumen默认支持多数据源,但如果系统存在多个结构相同的数据库实例,并根据某特定请求参数访问不同的实例,那么可以通过中间件实现动态配置。
1、在app/config/database.php文件中配置默认mysql数据库连接参数
2、在默认库中创建一个配置表,其中保存各数据库分库的配置,如下表(以corpid做分库条件),这个表只需要在主库中创建并维护
CREATE TABLE `corp_database` (
`corpid` varchar(50) NOT NULL DEFAULT '' COMMENT '租户id',
`read_host` varchar(100) NOT NULL DEFAULT '' COMMENT '读库地址',
`read_port` int(11) NOT NULL DEFAULT '3306' COMMENT '读库端口',
`read_database` varchar(100) NOT NULL DEFAULT '' COMMENT '读库数据库名',
`read_user` varchar(100) NOT NULL DEFAULT '' COMMENT '读库用户',
`read_password` varchar(100) NOT NULL DEFAULT '' COMMENT '读库密码',
`write_host` varchar(100) NOT NULL DEFAULT '' COMMENT '写库地址',
`write_port` int(11) NOT NULL DEFAULT '3306' COMMENT '写库端口',
`write_database` varchar(100) NOT NULL DEFAULT '' COMMENT '写库数据库名',
`write_user` varchar(100) NOT NULL DEFAULT '' COMMENT '写库用户',
`write_password` varchar(100) NOT NULL DEFAULT '' COMMENT '写库密码',
`driver` varchar(100) NOT NULL DEFAULT 'mysql' COMMENT '驱动名称',
`charset` varchar(100) NOT NULL DEFAULT 'utf8' COMMENT '字符集',
`collation` varchar(100) NOT NULL DEFAULT 'utf8_unicode_ci',
`prefix` varchar(100) NOT NULL DEFAULT '' COMMENT '数据表前缀',
`timezone` varchar(100) NOT NULL DEFAULT '+00:00' COMMENT '时区',
`strict` varchar(10) NOT NULL DEFAULT 'false' COMMENT '是否执行严格模式',
PRIMARY KEY (`corpid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3、创建一个corp_database的model类
4、在app/Http/Middleware/xxxMiddleware.php(自行在routes.php中配置生效)中添加以下代码
5、通过中间件修改数据库组件的默认链接名称实现动态分库。这样内部代码不需要做任何特殊处理即可实现对不同数据库分库的访问。
1、在app/config/database.php文件中配置默认mysql数据库连接参数
2、在默认库中创建一个配置表,其中保存各数据库分库的配置,如下表(以corpid做分库条件),这个表只需要在主库中创建并维护
引用
CREATE TABLE `corp_database` (
`corpid` varchar(50) NOT NULL DEFAULT '' COMMENT '租户id',
`read_host` varchar(100) NOT NULL DEFAULT '' COMMENT '读库地址',
`read_port` int(11) NOT NULL DEFAULT '3306' COMMENT '读库端口',
`read_database` varchar(100) NOT NULL DEFAULT '' COMMENT '读库数据库名',
`read_user` varchar(100) NOT NULL DEFAULT '' COMMENT '读库用户',
`read_password` varchar(100) NOT NULL DEFAULT '' COMMENT '读库密码',
`write_host` varchar(100) NOT NULL DEFAULT '' COMMENT '写库地址',
`write_port` int(11) NOT NULL DEFAULT '3306' COMMENT '写库端口',
`write_database` varchar(100) NOT NULL DEFAULT '' COMMENT '写库数据库名',
`write_user` varchar(100) NOT NULL DEFAULT '' COMMENT '写库用户',
`write_password` varchar(100) NOT NULL DEFAULT '' COMMENT '写库密码',
`driver` varchar(100) NOT NULL DEFAULT 'mysql' COMMENT '驱动名称',
`charset` varchar(100) NOT NULL DEFAULT 'utf8' COMMENT '字符集',
`collation` varchar(100) NOT NULL DEFAULT 'utf8_unicode_ci',
`prefix` varchar(100) NOT NULL DEFAULT '' COMMENT '数据表前缀',
`timezone` varchar(100) NOT NULL DEFAULT '+00:00' COMMENT '时区',
`strict` varchar(10) NOT NULL DEFAULT 'false' COMMENT '是否执行严格模式',
PRIMARY KEY (`corpid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3、创建一个corp_database的model类
class CorpDatabaseModel extends BaseModel{ private $table = 'corp_database'; public function __construct(){ parent::__construct(); } public function get($corpid){ if(!$corpid){ return null; } return app('db')->table($this->table)->where('corpid',$corpid)->first(); } public function getAndFormat($corpid){ if(!$corpid){ return null; } $r = app('db')->table($this->table)->where('corpid',$corpid)->first(); if($r) { $result['read']['host'] = $r['read_host']; $result['read']['port'] = $r['read_port']; $result['read']['database'] = $r['read_database']; $result['read']['username'] = $r['read_username']; $result['read']['password'] = $r['read_password']; $result['write']['host'] = $r['write_host']; $result['write']['port'] = $r['write_port']; $result['write']['database'] = $r['write_database']; $result['write']['username'] = $r['write_username']; $result['write']['password'] = $r['write_password']; $result['driver'] = $r['driver']; $result['charset'] = $r['charset']; $result['collation'] = $r['collation']; $result['prefix'] = $r['prefix']; $result['timezone'] = $r['timezone']; $result['strict'] = $r['strict']; return $result; } else { return null; } } /** * @param $save_array * @return mixed */ public function save($save_array){ return app('db')->db()->table($this->table)->insertGetId($save_array); } public function modifyById($id, $data =array()){ if(!$id){ return 0; } if(!count($data)){ return 0; } return app('db')->db()->table($this->table)->where('coprid',$id)->update($data); } }
4、在app/Http/Middleware/xxxMiddleware.php(自行在routes.php中配置生效)中添加以下代码
…… public function handle($request, Closure $next) { $corpId = $request->get('corpid', ''); if($corpId) { $corpDatabaseModel = new CorpDatabaseModel(); $dbConfig = $corpDatabaseModel->getAndFormat($corpId); if($dbConfig) { config(['database.connections.' . $corpId => $dbConfig]); config(['database.default' => $corpId]); } } …… } ……
5、通过中间件修改数据库组件的默认链接名称实现动态分库。这样内部代码不需要做任何特殊处理即可实现对不同数据库分库的访问。
发表评论
-
建立一个支持并发的Laravel任务模块
2020-09-30 10:17 532laravel/lumen的事件、任务调度等都是基于队列来实现 ... -
ElementUI上传组件在Lumen环境下跨域问题的解决
2020-08-25 11:10 963在后台的路由中间件中要增加跨域设置: namespace ... -
lumen集成结巴分词
2020-03-31 16:46 331常规的方法是通过compoer集成 composer re ... -
lumen操作mongodb
2019-01-30 14:40 874前提:使用Eloquent访问mongodb class ... -
lumen5.5使用rabbitmq
2019-01-21 10:53 1118在composer.json中的require中增加以下语句 ... -
lumen使用mongodb
2019-01-09 16:16 17471. 安装mongodb扩展 执行sudo pecl in ... -
在lumen中开发和执行artisan命令行任务
2018-12-22 17:28 1950lumen是laravel的简化版,其中artisan部分删除 ... -
在lumen安装阿里云短信服务SDK
2018-12-12 12:15 8631、下载SDK:https://help.aliyun.com ... -
lumen日志权限冲突问题
2016-11-02 11:44 1808运行lumen项目一般使用nginx作为webserver,因 ... -
lumen中使用调度任务
2016-04-22 12:21 3056需要在crontab中增加一行 * * * * * php ... -
在lumen中使用smtp方式发送txt/plain邮件
2016-04-22 11:46 12931、安装邮件组件 修改composer.json,在re ... -
lumen下操作excel
2016-04-22 11:34 20571、安装excel组件 修改composer.json, ... -
lumen中使用redis队列
2016-04-22 11:18 18781、采用redis作为队列驱动 修改.env文件 QU ... -
lumen中安装及使用redis作为cache
2016-04-22 10:54 21451、安装redis模块 在compose.json的re ...
相关推荐
amqp 用于Laravel和Lumen的AMQP包装器,用于发布和使用消息,尤其是来自RabbitMQ的消息特征高级队列配置轻松将消息添加到队列使用有用的选项监听队列安装作曲家将以下内容添加到composer.json中的require部分: ...
laravel-微信 用于Laravel / Lumen的微信SDK,基于 框架要求 overtrue / laravel-wechat:^ 5.1-> Laravel...composer require " overtrue/laravel-wechat:^5.1 " # overtrue/wechat 5.x composer require " overtrue/l
lumen-passport, 使用Lumen制作 Laravel 护照 lumen护照 使用Lumen制作 Laravel 护照一个简单的服务提供者,使 Laravel Passport与依赖项PHP> = 5.6.3流明> = 5.3通过Composer安
在Lumen中,可以使用第三方库如`spatie/laravel-permission`来实现ACL。 **6. 安装和配置spatie/laravel-permission** 首先,通过Composer安装库: ```bash composer require spatie/laravel-permission ``` ...
本资源提供了一套基于Lumen/AngularJS/Lumx开发的管理信息系统框架的设计源码。该项目包含了3003个PHP文件、606个JavaScript文件、206个CSS文件、187个SCSS文件、165个JSON文件、139个PHPT文件、119个Markdown文件、...
Laravel API文档生成器从现有的Laravel / Lumen ... composer require --dev mpociot/laravel-apidoc-generatorLaravel通过运行以下命令发布配置文件: php artisan vendor:publish --provider= " Mpociot\ApiDoc\ApiDo
在Lumen中,我们可以使用第三方包如`barryvdh/laravel-cors`来实现CORS支持。首先,通过Composer安装此包: ```bash composer require barryvdh/lumen-cors ``` ### 配置CORS中间件 安装完成后,需要在`bootstrap/...
要求该软件包具有以下要求: PHP 7.2或更高Laravel(或流明)5.5或更高Laravel /流明版本套餐版本5.1-5.4 5.5及更高3.x安装您可以通过运行以下命令,使用Composer安装此软件包: composer require axlon/laravel-...
第2步使用以下命令使用composer来打包: composer require --dev sbamtr/laravel-source-encrypter第三步对于Laravel 服务提供商将自动注册。 或者,您可以在config/app.php文件中手动添加服务提供商: 'providers' ...
composer require "babenkoivan/laravel-amqp:^1.0" ``` 然后,在 Laravel 的配置文件 `config/queue.php` 中,添加一个新的连接配置,例如 `amqp`,指定 RabbitMQ 的连接参数。 ### 4. 创建队列监听器 Laravel ...
**Laravel 开发 - Lumen 框架详解** Lumen 是 Laravel 生态系统中的一个微型框架,由 Taylor Otwell 创建,专为构建 API 和 微服务架构而设计。Lumen 提供了与 Laravel 类似的语法和结构,但更加轻量级,性能更优,...
而"laravel-aspect"则是Laravel框架的一个扩展,用于引入面向方面编程(Aspect-Oriented Programming, AOP)的概念到Laravel和Lumen环境中。面向方面编程是一种编程范式,旨在提高代码的可维护性和模块化,通过将...
Laravel/Lumen 使用 Redis队列 Laravel/Lumen 框架提供了一个队列系统,允许开发者将耗时操作或高并发操作异步执行,以缓解系统压力、提高系统响应速度和负载能力。在这个系统中,Redis 可以作为队列驱动,负责存储...
在本文中,我们将深入探讨如何使用Laravel框架与Lumen微服务架构来处理PDF文档的生成,特别是结合K98kurz/pdf库,一个基于dompdf的包装器。Laravel和Lumen是PHP世界中非常受欢迎的开源项目,分别用于构建全面的Web...
例如,如果你在一个Laravel项目中使用了某种特定的日志配置,然后想将其应用于Lumen项目,Lumen-Helpers可以让你轻松实现这一目标。 **4. 视图(Views)支持** Lumen-Helpers添加了对Lumen的视图支持,允许你在...
composer require beyondcode/laravel-ssh-tunnel ``` 安装完成后,你需要在`config/app.php`的`providers`数组中注册服务提供者: ```php BeyondCode\LaravelSshTunnel\SshTunnelServiceProvider::class, ``` ...
$ composer require elfsundae/laravel-hashid 对于Lumen或v5.5之前的Laravel,您需要手动注册服务提供商: ElfSundae \ Laravel \ Hashid \ HashidServiceProvider ::class 然后发布配置文件: # For Laravel ...
**Laravel 开发 - Lumen 框架详解** Lumen 是 Laravel 生态系统中的一个微型框架,由 Taylor Otwell 创建,专为构建 API 和 微服务 应用程序而设计。Lumen 提供了与 Laravel 相似的语法和结构,但更轻量级、性能更...