首页 » 网站推广 » mysqlconnectorphp技巧_laravel框架数据库连接的封装

mysqlconnectorphp技巧_laravel框架数据库连接的封装

duote123 2024-12-10 0

扫一扫用手机浏览

文章目录 [+]

1.数据库管理器阶段;在做事注册阶段,通过做事供应者“Illuminate\Database\DatabaseServiceProvider”注册了数据库管理器做事(“DB”做事)和数据库连接工厂做事(“db.factory”做事),通过上述做事可以获取数据库管理器实例(DatabaseManager类实例)和数据库连接工厂实例(ConnectionFactory类实例),个中数据库连接工厂实例作为数据库管理器实例的一个属性。
下面先容查询布局器实现过程中的数据库管理器阶段,个中部分实当代码如下:

对付查询布局器,当须要操作数据库时,可以利用类似“DB::table('users')->get();”的语法,个中“DB::table(‘users’)”部分是获取查询布局器,而“->get()”是调用查询布局的方法实现相应数据表操作的过程。
查询布局器的建立过程可以分为两个阶段:一个是数据库连接封装阶段,另一个是查询布局器天生阶段。
接下来紧张谈论数据库连接封装阶段,而这部分又可以分为四个步骤:一是数据库管理器阶段,二是数据库连接工厂阶段,三是数据库连接器阶段,四是数据库连接创建阶段。
数据库管理器阶段紧张用于天生数据库连接工厂,而数据库连接工厂管理着不同数据库连接器的创建,这个阶段会根据数据库配置信息天生相应数据库的连接器,在数据库连接器阶段会根据数据库配置信息天生相应数据库的PDO实例,而在数据库连接创建阶段则天生相应数据库的连接实例,用于封装对应的PDO实例、数据库配置等信息。
下面先容数据库管理器阶段。

mysqlconnectorphp技巧_laravel框架数据库连接的封装

对付“DB::”阶段,是通过DB的外不雅观类(Facades)获取数据库管理器实例并调用个中的table()方法,由于该类中没有这个方法,以是调用魔术函数__call()方法,该方法进而调用方法“[$this->connection(),$method]”,即$this->connection()返回实例的table()方法,而“$this->connection()”将根据配置文件获取数据库连接实例,这也是数据库连接封装阶段的重点。
文件\Illuminate\Database\DatabaseManager.php

mysqlconnectorphp技巧_laravel框架数据库连接的封装
(图片来自网络侵删)

首先,通过parseConnectionName()函数获取配置文件中关于默认数据库名称和类型的设置,而对付数据库配置信息的获取是通过getDefaultConnection()函数实现的,个中,配置文件为“laravel\config\database.php”,对数据库名称和类型的配置项为“default”项,Laravel框架默认设置为“mysql”,于是返回的数据库名称和类型配置信息分别为“$name=\公众mysql\公众”和“$type=\"大众null\"大众”。
其次,通过getConfig()函数根据数据库名称获取对数据库的配置,包括数据库的驱动、主机地址、用户名、密码和利用的数据库名等,对付不同类型的数据库配置也不同。
接下来进入数据库连接工厂阶段,须要把稳的是,数据库连接工厂的实例(“db.factory”做事)在创建数据库管理器(“DB”做事)的时候作为依赖已经通过做事容器注入到数据库管理器中了。

2.数据库连接工厂阶段;前面提到Laravel框架默认支持四种关系型数据库,那么为了对上层供应统一的接口,须要在底层根据不同的配置调用不同的数据库驱动扩展,而这里Laravel框架利用了大略工厂设计模式,用来根据配置文件获取不同的数据库连接实例。
下面给出数据库连接工厂阶段部分代码:文件\Illuminate\Database\Connectors\ConnectionFactory.php

上述代码根据数据库名称实例化对应的连接器,即createConnector()函数部分。
连接器实例用来管理数据库连接创建阶段DSN字符串的产生、PDO类的实例化及数据库配置的设置等。
在Laravel框架默认配置中,利用MySQL数据库,即读写类型用同一个数据库,如果须要设计读写分离的数据库,可以在配置时对类型进行定义,之后将会在这部分起浸染。

3.连接器阶段;在连接器阶段,针对不同的数据库将会有不同的实现,紧张包括连接DSN名称及配置等。
Laravel框架用四个类分别封装了默认支持的四个数据库连接的过程,通过connect()方法供应统一的接口。
下面给出这部分实现的代码:文件\Illuminate\Database\Connectors\MySqlConnector.php

文件\Illuminate\Database\Connectors\Connector.php

从源码中可以看到,这里利用PDO扩展来实现连接的建立,即“new PDO($dsn,$username,$password,$options)”,而对付不同的DSN名称,则通过getDsn()函数获取。
在连接器阶段紧张完成PDO类的实例化及对字符集、时区等的设置,即代码“$connection->prepare($names)->execute();”和“$connection->prepare('set time_zone=\"大众'.$config['timezone'].'\公众')->execute();”部分。

4.数据库连接创建阶段;不同数据库连接的实例实在是封装了对应连接的PDO类实例、要求语法类实例和结果处理类实例,从而为上层利用数据库连接实例供应统一的接口。
部分代码如下:文件\Illuminate\Database\Connectors\ConnectionFactory.php

文件\Illuminate\Database\Connection.php

文件\Illuminate\Database\MySqlConnection.php

通过上面的源码可以看出,对应数据库连接实例的创建依然利用大略工厂模式实现,对默认支持的四个数据库分别供应了四个数据库连接类,用于封装底层不同的实现方法。
这四个数据库连接类都继续于\Illuminate\Database\Connection类,该类为数据库连接供应统一的接口,对付分外的部分须要分别设计,如数据库SQL语法实例和结果处理实例对付四种数据库是不同的,须要单独设计。

相关文章

php礼拜断定技巧_PHP date 函数

PHP date( 函数PHP date( 函数可把韶光戳格式化为可读性更好的日期和韶光。韶光戳是一个字符序列,表示一定的事宜...

网站推广 2024-12-12 阅读0 评论0

php变量真技巧_PHP 变量

实例<?php$x=5;$y=6;$z=$x+$y;echo$z;?>运行实例 »与代数类似x=5y=...

网站推广 2024-12-12 阅读0 评论0