- 浏览: 58766 次
- 性别:
- 来自: 广州
文章分类
最新评论
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 434laravel/lumen的事件、任务调度等都是基于队列来实现 ... -
ElementUI上传组件在Lumen环境下跨域问题的解决
2020-08-25 11:10 842在后台的路由中间件中要增加跨域设置: namespace ... -
lumen集成结巴分词
2020-03-31 16:46 279常规的方法是通过compoer集成 composer re ... -
lumen操作mongodb
2019-01-30 14:40 802前提:使用Eloquent访问mongodb class ... -
lumen5.5使用rabbitmq
2019-01-21 10:53 1076在composer.json中的require中增加以下语句 ... -
lumen使用mongodb
2019-01-09 16:16 16821. 安装mongodb扩展 执行sudo pecl in ... -
在lumen中开发和执行artisan命令行任务
2018-12-22 17:28 1851lumen是laravel的简化版,其中artisan部分删除 ... -
在lumen安装阿里云短信服务SDK
2018-12-12 12:15 8091、下载SDK:https://help.aliyun.com ... -
lumen日志权限冲突问题
2016-11-02 11:44 1721运行lumen项目一般使用nginx作为webserver,因 ... -
lumen中使用调度任务
2016-04-22 12:21 2971需要在crontab中增加一行 * * * * * php ... -
在lumen中使用smtp方式发送txt/plain邮件
2016-04-22 11:46 12411、安装邮件组件 修改composer.json,在re ... -
lumen下操作excel
2016-04-22 11:34 19851、安装excel组件 修改composer.json, ... -
lumen中使用redis队列
2016-04-22 11:18 18191、采用redis作为队列驱动 修改.env文件 QU ... -
lumen中安装及使用redis作为cache
2016-04-22 10:54 20771、安装redis模块 在compose.json的re ...
相关推荐
amqp 用于Laravel和Lumen的AMQP包装器,用于发布和使用消息,尤其是来自RabbitMQ的消息特征高级队列配置轻松将消息添加到队列使用有用的选项监听队列安装作曲家将以下内容添加到composer.json中的require部分: ...
lumen-passport, 使用Lumen制作 Laravel 护照 lumen护照 使用Lumen制作 Laravel 护照一个简单的服务提供者,使 Laravel Passport与依赖项PHP> = 5.6.3流明> = 5.3通过Composer安
Laravel API文档生成器从现有的Laravel / Lumen ... composer require --dev mpociot/laravel-apidoc-generatorLaravel通过运行以下命令发布配置文件: php artisan vendor:publish --provider= " Mpociot\ApiDoc\ApiDo
要求该软件包具有以下要求: PHP 7.2或更高Laravel(或流明)5.5或更高Laravel /流明版本套餐版本5.1-5.4 5.5及更高3.x安装您可以通过运行以下命令,使用Composer安装此软件包: composer require axlon/laravel-...
Laravel开发-zuora-laravel-sdk Lumen/Laravel服务提供商,用于连接Zuora SOAP API
第2步使用以下命令使用composer来打包: composer require --dev sbamtr/laravel-source-encrypter第三步对于Laravel 服务提供商将自动注册。 或者,您可以在config/app.php文件中手动添加服务提供商: 'providers' ...
本资源提供了一套基于Lumen/AngularJS/Lumx开发的管理信息系统框架的设计源码。该项目包含了3003个PHP文件、606个JavaScript文件、206个CSS文件、187个SCSS文件、165个JSON文件、139个PHPT文件、119个Markdown文件、...
Laravel开发-laravel-aspect Laravel框架和Lumen的面向方面编程库
Laravel/Lumen 使用 Redis队列
Laravel开发-lumen-framework Laravel管腔框架。
Laravel开发-pdf-lumen Laravel Lumen的K98kurz/pdf(dompdf包装)兼容叉
Laravel开发-laravel-amqp 用于laravel和lumen发布和使用消息的AMQP包装器
安装composer require " overtrue/laravel-pinyin:~4.0 "对于Laravel config/app.php下行添加到config/app.php的部分providers config/app.php : 'providers' => [ //... Overtrue \ LaravelPinyin \ ...
Laravel开发-laravel-fcm 用于FireBase云消息传送的Laravel/Lumen包(从Brozot/Laravel FCM克隆)
lumen / laravel / restful交流群:216721539(备注laravel或lumen) 电子邮件: 教程 有用的链接 laravel,dingo / api,jwt,fractal的文档。 dingo / api dingo api中文文档 jwt(json-web-token) 变压器 ...
Laravel开发-lumen-helpers 改进了Lumen和Laravel之间的互操作性。
Laravel开发-lumen-request-logger Laravel的HTTP请求记录器中间件
Laravel开发-cors-lumen Lumen Micro框架的跨源站资源共享(CORS)中间件和服务提供商。
Laravel开发-laravel pug(例如jade)和pug刀片模板支持laravel和lumen,请参阅:https://github.com/bkwld/laravel-pug