首页 » PHP教程 » laravelconnectorphp技巧_laravel框架数据库连接的封装

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

访客 2024-11-20 0

扫一扫用手机浏览

文章目录 [+]

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

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

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

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

laravelconnectorphp技巧_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语法实例和结果处理实例对付四种数据库是不同的,须要单独设计。

相关文章

Java代码虚拟化保护技术与应用前景

软件应用的需求日益增长,软件开发过程中对代码的保护成为了一个重要议题。Java作为一种广泛应用于企业级应用的编程语言,其代码虚拟化...

PHP教程 2025-03-02 阅读1 评论0

CAD插件错误代码与应对步骤

CAD(计算机辅助设计)软件在工程设计领域得到了广泛应用。CAD插件作为提升设计效率的重要工具,在提高设计师工作效率的也带来了一定...

PHP教程 2025-03-02 阅读1 评论0

上古卷轴代码规则大全游戏背后的编程奥秘

《上古卷轴》作为一款深受玩家喜爱的角色扮演游戏,自问世以来便以其丰富的世界观、独特的游戏体验和深厚的文化底蕴吸引了无数玩家。在这款...

PHP教程 2025-03-02 阅读1 评论0