本系列目录

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

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

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

复制标题直接搜索即可

前言


咔咔闲谈

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

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

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

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

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


生成的控制器

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


模型文件

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

根据config目录下的配置可以得知!目前系统中使用的默认数据库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类,然后实例化即可。

二、设置切换数据库连接

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

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

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

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


自己加的数据连接

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

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

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


设置连接的数据名

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

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


实现

看一下打印结果


打印结果

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


表数据

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

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

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

暂且就先看index这个方法


index方法

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


查看结果

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


表数据

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

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

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

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

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

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

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


容器

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


入口文件

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

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

Phalcon如何切换数据库《Phalcon入坑指南系列 三》的更多相关文章

  1. Phalcon多模块如何实现连接不同数据库 《Phalcon入坑指南系列 五》

    本系列目录 一.Phalcon在Windows上安装 <Phalcon入坑指南系列 一> 二.Phalcon入坑必须知道的功能<Phalcon入坑指南系列 二> 三.Phalc ...

  2. Phalcon如何创建多模块并能进行访问 《Phalcon入坑指南系列 四》

    本系列目录 一.Phalcon在Windows上安装 <Phalcon入坑指南系列 一> 二.Phalcon入坑必须知道的功能<Phalcon入坑指南系列 二> 三.Phalc ...

  3. ElasticSearch入坑指南之概述及安装

    ---恢复内容开始--- ElasticSearch入坑指南之概述及安装 了解ElasticSearch ElasticSearch(简称ES)基于Lucene的分布式全文检索引擎.使用ES可以实现近 ...

  4. Rust入坑指南:齐头并进(上)

    我们知道,如今CPU的计算能力已经非常强大,其速度比内存要高出许多个数量级.为了充分利用CPU资源,多数编程语言都提供了并发编程的能力,Rust也不例外. 聊到并发,就离不开多进程和多线程这两个概念. ...

  5. electron入坑指南

    electron入坑指南 简介 electron 实际集成chrome浏览器和node环境, 运行你写的网页 app 基本目录结构 index.html 名称可以不是index, 这个文件与普通网页的 ...

  6. C语言入坑指南-被遗忘的初始化

    前言 什么是初始化?为什么要初始化?静态变量和局部变量的初始化又有什么区别?实际应用中应该怎么做?本文将一一回答这些问题. 什么是初始化 初始化指的是对数据对象或者变量赋予初始值.例如: int va ...

  7. Elasticsearch入坑指南之RESTful API

    Elasticsearch入坑指南之RESTful API Tags:Elasticsearch ES为开发者提供了非常丰富的基于Http协议的Rest API,通过简单的Rest请求,就可以实现非常 ...

  8. eclipse中导入外部包却无法查看对应源码或Javadoc的入坑指南

    eclipse中导入外部包却无法查看对应源码或Javadoc的 入坑指南 出现这个错误的原因是,你虽然导入了.jar包,但没有配置对应的Javadoc或源码路径,所以在编辑器中无法查看源 码和对应AP ...

  9. Rust入坑指南:核心概念

    如果说前面的坑我们一直在用小铲子挖的话,那么今天的坑就是用挖掘机挖的. 今天要介绍的是Rust的一个核心概念:Ownership.全文将分为什么是Ownership以及Ownership的传递类型两部 ...

随机推荐

  1. 【AI】PytorchSegmentCode

    From: https://liudongdong1.github.io/ 0. 基础配置 0.1. 设置随机种子 def set_seeds(seed, cuda): ""&qu ...

  2. git上传项目

    $ git config --global user.name "xxxxxxxx" --设置名字 $ git config --global user.email "x ...

  3. COM笔记-动态链接

    在实现了IUnknown之后,组件和客户之间只是一种非常松散的连接,这使用组件和客户各自可以发生变化而不会对对方造成什么影响. 下面讨论如何将组件放入到动态链接库(dll)中. 关于DLL更多内容可以 ...

  4. sizeof()和 strlen()的区别 --- 个人笔记

    在学习C语言和linux的时候,遇到了一些常见问题.题目,有些很简单,有些容易出错,本人水平有限,未免会出错,今天有时间,就将以前做的笔记,一一拿出来,写写blog. sizeof()和 strlen ...

  5. SpringBoot中自定义错误页面

    错误页面定制(在有模板引擎的情况下): 有模板的支持下: 在templates文件夹下 建立 error文件夹 在error文件夹下 404.html 500.html 4xx.html (名字就叫4 ...

  6. 微信小程序学习笔记四 自定义组件

    1. 自定义组件 类似Vue或react中的自定义组件 小程序允许我们使用自定义组件的方式来构建页面 1.1 创建自定义组件 类似于页面, 一个自定义组件由json wxml wxss js 4个文件 ...

  7. Spring Data JPA实体的生命周期总结

    目录 四种状态 API示例 persist remove merge refresh 参考链接 四种状态 首先以一张图,简单介绍写实体生命周期中四种状态之间的转换关系: 瞬时(New):瞬时对象,刚N ...

  8. 高德地图——添加标记的两种方法&删除地标记的两种方法

    添加标记: 1.marker.setMap(map); 2.marker.add([marker]); 删除标记: 1.marker.setMap(null); 2 map.remove([marke ...

  9. MySQL5.7 高可用高性能配置调优

    [client]default-character-set = utf8mb4[mysqld]### 基本属性配置port = 3306datadir=/data/mysql# 禁用主机名解析skip ...

  10. redux的使用

    1.redux的使用 核心概念 action 动作的对象 包含2个属性 type:标识属性, 值为字符串, 唯一, 必要属性 data:数据属性, 值类型任意, 可选属性 例子:{ type: 'AD ...