本文作为 Laravel ORM 系统的研究开篇,主要对 Laravel ORM 系统的主要功能、依赖的第三方类库、系统的目录结构及对应目录所实现的功能,进行解释说明。 学习完本篇教程,你将会对 Laravel ORM 的结构有个全局观念,并且为后续研究打好基础。
Illuminate database(Laravel ORM) 组件 在 GitHub 的地址
Illuminate database 提供内置查询语句构造器,Eloquent ORM,表空间(schema)构造器实现 PHP 对数据库操作的 ORM 系统。当前支持 MySQL, Postgres, SQL Server 和 SQLite 四款数据库。此外还提供在 Laravel 框架内使用的数据库抽象层 DB 类。
非但如此,database 组件提供了能在非 Laravel 框架以外的项目使用接口 Capsule 类。
使用方法也很简单:
use Illuminate\Database\Capsule\Manager as Capsule;
$capsule = new Capsule;
$capsule->addConnection([
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'database',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
]);
// Set the event dispatcher used by Eloquent models... (optional)
use Illuminate\Events\Dispatcher;
use Illuminate\Container\Container;
$capsule->setEventDispatcher(new Dispatcher(new Container));
// Make this Capsule instance available globally via static methods... (optional)
$capsule->setAsGlobal();
// Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher())
$capsule->bootEloquent();
通过项目 composer.json 配置文件我们可以看到,本项目依赖的其它组件有:
git clone [email protected]:illuminate/database.git
composer install
|---- vendor
|---- composer composer 包管理生成的自动加载文件
|---- doctrine 单复数转换器组件
|---- illuminate Laravel ORM 系统
|---- container Laravel 容器组件
|---- contracts Laravel 契约组件
|---- database ORM 组件
|---- support Laravel 辅助组件
|---- nesbot Carbon 日期处理组件
|---- paragonine 随机字符生成组件
|---- symfony
|---- composer.json composer 包管理配置文件
本系列重点解析 illuminate/database Laravel ORM 组件的分析,仅当有设计到其它组件时再做相关分析。
前面我们大致了解了 Laravel ORM 系统整体的目录结构,本节我们重点走进 illuminate/database 文件夹,即 Laravel ORM 核心
|---- database
|---- Capsule 文件夹提供非 Laravel 框架以外的系统使用 Laravel ORM 组件的数据库类(Manager.php)
|---- Concerns @TODO
|---- Connectors 实现四种数据库的库连接实现类
|---- Console 定义 Laravel 数据库迁移(migrate)等相关命令行工具类
|---- Eloquent ORM 系统实现
|---- Events ORM 处理过程中的事件接口定义
|---- Migrations 定义数据库迁移命令行工具对应的数据迁移实现类
|---- Query ORM 查询构造器实现
|---- Schema 表空间构造器实现
|---- ConnectionInterface.php 数据库连接接口,完成数据库连接操作、CURD 、事务等接口方法定义
|---- Connection.php 继承自 ConnectionInterface 接口,实现通过 PDO 数据库连接操作,构建数据库查询构造器实例、SQL 语法
解析器实例,实现 CURD、事务、数据绑定处理等操作。
|---- ConnectionResolverInterface.php @TODO
|---- ConnectionResolver.php @TODO
|---- DatabaseManager.php 供 DatabaseServiceProvider 服务器提供者使用的数据库管理器,功能是管理不同数据库驱动(MySql、Postgres...)的连接实例
|---- DatabaseServiceProvider.php @TODO
|---- DetectsDeadlocks.php 判定给定的数据库异常是否为数据库死锁类型异常
|---- DetectsLostConnections.php 判断给定的数据库异常是否为断开连接类型异常
|---- Grammar.php @TODO
|---- MigrationServiceProvider.php 数据库迁移服务提供者
|---- MysqlConnection.php MySQL 数据库连接类
|---- PostgresConnection.php Postgres 数据库连接类
|---- SQLiteConnection.php SQLite 数据库连接类
|---- SqlServerConnection.php SQL Server 数据库连接类
|---- QueryException.php 继承自 PDOException 异常