Phalcon如何切换数据库《Phalcon入坑指南系列 三》

本系列目录

一、Phalcon在Windows上安装 《Phalcon入坑指南系列 一》

二、Phalcon入坑必须知道的功能(项目配置、控制器、模型、增、删、改、查)

三、Phalcon如何切换数据库《Phalcon入坑指南系列 三》

复制标题直接搜索即可

前言

咔咔闲谈

咔咔闲谈

在以前的项目中大多数都是一个库就搞定了,很少遇到多库操作的。

ThinkPHP框架对于多库说的非常明白,但是这个Phalcon框架多库就不是那么容易了。

接下来看看Phalcon框架针对于跨库如何操作。

一、解析Phalcon数据库连接实现

之前学的东西不能忘,先使用命令来生成一个控制器phalcon create-controller --name 文件名

生成的控制器

生成的控制器

接着使用命令行创建出一个模型文件。

模型文件

模型文件

这个模型文件里边的内容先不去管它,下文咔咔在慢慢的解释哈!

根据config目录下的配置可以得知!目前系统中使用的默认数据库test

默认数据库test

默认数据库test

现在项目中需要别的数据库数据应该怎么弄呢?看了文档是不是也很迷惑。

迷惑就对了,刚刚接触一个新的框架不迷惑才怪呢!

根据初步读取文档得到的信息就是在server文件里边进行了数据库连接。

那么就很简单了,它原始的是怎么弄的,现在就照猫画虎呗!

首先对连接初始数据库做一个简单的解析。

先看第一句$config = $this->getConfig();这个看名字就知道是获取配置,获取的当然也是config文件。

接着$class = 'Phalcon\Db\Adapter\Pdo\\' . $config->database->adapter;这一句估计有部分人会有点懵,对于这块看不明白。

其实很简单的,可以到config文件中看一下是什么。

查看配置

查看配置

这不就很清晰了,就是数据库类型呗!

变量param就不做解释了,就是进行简单的赋值而已。

最重要的是最后一行代码return new $class($params);,你要明白这个时候的class是什么,也就是$class = 'Phalcon\Db\Adapter\Pdo\\' . $config->database->adapter;这块东西会返回什么。

通过读取配置文件可以得知就是Phalcon\Db\Adapter\Pdo\MySQL 结合起来。

接着你就可以追溯到这个类里边去了

MySQL类

MySQL类

注释都写的明明白白的,用起来就是先引入MySQL类,然后实例化即可。

二、设置切换数据库连接

看了上文Phalcon对于默认数据库的连接方式,那么你有想法了吗?

没有想法的话,再给你简化一下流程。

数据库默认配置文件config.php -> server.php读取config的配置信息 -> 通过类Phalcon\Db\Adapter\Pdo\Mysql来实现连接。

既然咱们要做,对应的点就是server.php

自己加的数据连接

自己加的数据连接

根据上图可以看到,所有的配置信息都是直接写进去的,并没有从配置文件中读取。

今天要做的事情是多库切换连接,为的是实现,优化工作后期做,并且也不会直接使用今天的这种方式来处理的。

然后回到创建的server模型中,进行设置此模型使用的数据库名即可

设置连接的数据名

设置连接的数据名

接着来到控制器中,先将version模型给实例化出来。

然后直接调用find方法,查询id为1的数据。

实现

实现

看一下打印结果

打印结果

打印结果

再来对比一下跟数据库的数据是否一一对应。

表数据

表数据 三、设置了多库连接对默认连接的库是否有影响

此时估计很多小伙伴会引发出这个问题,那么不妨来进行测试一下。

可以切换到我们之前文章写的index控制器

暂且就先看index这个方法

index方法

index方法

浏览器执行一下,看一下返回结果

查看结果

查看结果

不放心的话可以再看一下对应的数据库对应的表数据

表数据

表数据

这下就可以放心了,到此本节主题多库怎么切换连接就说明完了。

四、疑问解答($di = new FactoryDefault())

在Phalcon中我们看到了使用了$di->setShared,对于这个di很多人都不明白其怎么回事。

在这之前咔咔略微的对ThinkPHP的源码看了一遍,发现其功能就类似于ThinkPHP的容器概念。

在ThinkPHP中容器是使用了注册树模式,需要使用对应对象实例的时候就可以直接获取,这样就避免了一个类反复的创建。这就是其中的一个优点。

通过对Phalcon源码的追踪发现也是实现类似的功能,在容器中注册一个服务。就跟ThinkPHP通过注册树设计模型来对注册类进行保存。

服务注册成“shared”类型的服务,意味着这个服务将使用 [单例模式]运行, 一旦服务被首次解析后,这个实例将被保存在容器中,之后的每次请求都在容器中查找并返回这个实例

容器

容器

跟ThinkPHP一样,也是放到了入口文件处

入口文件

入口文件

本节先到这里,一点点慢慢深入发现其设计之美。

坚持学习、坚持写作、坚持分享是咔咔从业以来所秉持的信念。愿文章在偌大的互联网上能给你带来一点帮助,我是咔咔,下期见。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwgxzf.html