thinkphp5框架的model支持多地区数据库切换

这篇具有很好参考价值的文章主要介绍了thinkphp5框架的model支持多地区数据库切换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、说明

一般情况下,都是在model中指定一个数据库连接参数即可。但某些情况下,相同的库表会在不同地区都有部署,这个时候需要按地区进行切换(只有一个model情况下)。

2、多model继承方式

Model层代码
//A地区的数据库
class A extends Model
{
    protected $connection = 'xxx';
    protected $table = 'xxx';

    //其他操作方法
}

//B地区的数据库
class B extend A
{
    protected $connection = 'xxx';
    protected $table = 'xxx';
}

使用A地区的数据库:$model = new A();
使用B地区的数据库:$model = new B();

3、单model重写构造方法

需要更改地方:config.php配置、重写Model的构造方法

  1. config.php
点击查看代码
return [
    "hk" => [
        "xxx" => [xxx],//具体的数据库连接参数
    ],
    "sg" => [
        "xxx" => [xxx],//具体的数据库连接参数
    ],
];
  1. 新建一个BaseModel重写Model的构造方法
点击查看代码
//自定义Model基类
class BaseModel extends Model
{
    /**
     * 多地区数据库配置
     * 其中的值必须在config中配置的数据库配置:Config::get('hk.xxx')
     * 例如:[
     *      'hk' => 'hk.xxx',
     *      'sg' => 'sg.xxx'
     * ]
     * @var array
     */
    protected $multi_connections = [];
    protected $multi_connections_key;

    //重写构造方法
    public function __construct($data = [])
    {
        //通过new model('xx.xx')设置 connection => 多地区数据库
        if (is_string($data)) {
            $this->multi_connections_key = $data;//记录当前的地区key
            if ($conn = $this->multi_connections[$data]) {
                //此时:data=hk
                $this->connection = $conn;
            } else {
                //此时:data=hk.xx,且必须设置配置文件
                $this->connection = $data;
            }
            $data = [];
        }

        parent::__construct($data);
    }
}
  1. 在model中使用
点击查看代码
class A extends BaseModel
{
    //多地区数据库配置(下面支持sg和kr地区的切换)
    protected $multi_connections = [
        'sg' => 'sg.xxx',
        'kr' => 'kr.xxx',
    ];

}
  1. 在控制器中进行使用

url设置:http://xxx?region=xxx文章来源地址https://www.toymoban.com/news/detail-651021.html

点击查看代码
class Demo extends Controller
{
    public $region;
    protected $mod;

    public function _initialize()
    {
        //获取当前需要的地区,默认hk
        $this->region = input('region', 'hk');
        //根据地区进行new Model
        $this->mod = new A($this->region);
    }

    //测试方法
    public function index()
    {
        //这里可以使用model的方法
        $data = $this->model->xxx()
    }
}


到了这里,关于thinkphp5框架的model支持多地区数据库切换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • thinkPhp5返回某些指定字段

    或者指定要的字段的数组  查询符合条件的多条数据  

    2024年02月09日
    浏览(45)
  • ThinkPHP5远程命令执行漏洞

    ThinkPHP是一个快速、兼容而且简单的轻量级国产 PHP开发框架 ,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,使用面向对象的开发结构和 MVC模式 ,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式。 由于th

    2024年02月11日
    浏览(48)
  • Thinkphp5.x全漏洞复现分析

    我们可以把namespace理解为一个单独的空间,事实上它也就是一个空间而已,子命名空间那就是空间里再划分几个小空间,举个例子: 当有多个子命名空间有相同名称类时,不指定使用哪个命名空间的情况下取最后定义的命名空间中的类,比如上面的 dog 取的时 dogC 中的类,在

    2024年04月22日
    浏览(46)
  • ThinkPHP5.0.21远程命令执行漏洞

    漏洞出现的背景 : ThinkPHP是⼀款运⽤极⼴的PHP开发框架。 其5.0.23以前的版本中,获取method的⽅法中没有正确处理⽅法名, 导致攻击者可以调⽤Request类任意⽅法并构造利⽤链,从⽽导致远程代码执⾏漏洞。 由于ThinkPHP5框架对控制器名没有进⾏⾜够的安全检测,导致在没有开

    2024年02月04日
    浏览(47)
  • ThinkPHP5系列远程代码执行漏洞复现(详细)

    ThinkPHP是一款运用极广的PHP开发框架。其版本5中,由于框架对控制器名没有进行足够的检测,会导致在没有开启强制路由的情况下可执行任意方法,从而导致远程命令执行漏洞。 漏洞危害 启动环境 切换到/thinkphp/5.0.23-rce# 目录下 将version改为2,保存并退出 接着执行 此时环境

    2024年02月12日
    浏览(43)
  • ThinkPHP5.0.23 远程代码执行漏洞

    ThinkPHP 是一款运用极广的 PHP 开发框架。其 5.0.23 以前的版本中,获取 method 的方法中没有正确处理方法名,导致攻击者可以调用 Request 类任意方法并构造利用链,从而导致远程代码执行漏洞。 百度漏洞 获得exp 路径: POST传参 我用的是hackbar,用burpsuite也行。 burp操作方法 抓包

    2024年02月11日
    浏览(46)
  • 知识笔记(九十)———ThinkPHP5中时间查询的方法

    使用 where 方法 where 方法支持时间比较,例如: 第三个参数可以传入任何有效的时间表达式,会自动识别你的时间字段类型,支持的时间类型包括 timestamps 、 datetime 、 date 和 int 。 使用 whereTime 方法 whereTime 方法提供了日期和时间字段的快捷查询,示例如下: 还提供了更方便

    2024年01月21日
    浏览(55)
  • thinkphp5.0.24反序列化漏洞分析

    thinkphp5框架: thinkphp5的入口文件在 publicindex.php ,访问 反序列化起点 写一个反序列化入口点 全局搜索 __destruct() 函数 thinkphp_5.0.24thinkphplibrarythinkprocesspipesWindows.php 中的 __destruct() 函数,调用了removeFiles() 跟进removeFiles(),第163行的file_exists可以触发 __toString 方法 全局搜索

    2023年04月08日
    浏览(42)
  • Flask框架-数据库查询对象转字典或列表:实现model_to_dict的功能

    使用场景: 对于一些简单的表,可以直接通过该方法将数据查询对象进行序列化操作,转成python中列表或字典结构,再展示给前端。 1、model_to_dict方法:对单个查询对象序列化 2、model_to_list方法:查询结果是list时,对多个查询对象序列化

    2024年02月12日
    浏览(40)
  • Thinkphp5.0.23 rce(远程代码执行)的漏洞复现

    框架介绍: ThinkPHP是一款运用极广的PHP开发框架。 漏洞引入: 其5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。 1、访问靶机地址+端口号 进入首页 2、Burp抓包修改传参方式为Po

    2024年02月06日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包