专栏首页PhpZendo深入研究 Laravel ORM (Laravel Eloquent) 系统 (一) – 概要

深入研究 Laravel ORM (Laravel Eloquent) 系统 (一) – 概要

本文作为 Laravel ORM 系统的研究开篇,主要对 Laravel ORM 系统的主要功能、依赖的第三方类库、系统的目录结构及对应目录所实现的功能,进行解释说明。 学习完本篇教程,你将会对 Laravel ORM 的结构有个全局观念,并且为后续研究打好基础。

一、Laravel ORM 概要

Illuminate database(Laravel ORM) 组件 在 GitHub 的地址

1.1 Laravel ORM 简介

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();

1.2 Laravel ORM 的依赖组件

通过项目 composer.json 配置文件我们可以看到,本项目依赖的其它组件有:

1.3 Laravel ORM 下载安装

git clone [email protected]:illuminate/database.git

composer install

1.4 Laravel ORM 目录结构

|---- 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 核心组件目录结构

前面我们大致了解了 Laravel ORM 系统整体的目录结构,本节我们重点走进 illuminate/database 文件夹,即 Laravel ORM 核心

2.1 文件结构

|---- 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 异常

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Laravel 广播系统工作原理

    今天,让我们深入研究下 Laravel 的广播系统。广播系统的目的是用于实现当服务端完成某种特定功能后向客户端推送消息的功能。本文我们将学习如何使用第三方 Pu...

    柳公子
  • Laravel 请求生命周期

    当需要使用一个框架、工具或者服务时,在使用前应对其运行原理进行研究。随着原理研究工作的不断深入,能让我们在使用时更得心应手。

    柳公子
  • 深入浅出 Laravel 的 Facade 外观系统

    本文将从以下几个方面出发,全面讲解 Laravel 中 Facade 的运行原理,为了便于理解后续中所有 Facade 译作「外观」:

    柳公子
  • Skype for Business Web 应用

     微软统一通信,我最看好的一点就是跨界无缝沟通,其中比较欣赏的是网页加入会议,支持IE\Chrome\Firfox,只要有internet、有pc、有浏览器,就...

    杨强生
  • 什么,你还不知道什么是JVM垃圾回收?!

    通常,我们在写java程序的时候,似乎很少关注内存分配和垃圾回收的问题。因为,这部分工作,JVM已经帮我们自动实现了。

    烟雨星空
  • 如何「科学的比较」机器学习模型表现?

    最近在赶paper,码字的时间不多,也刚好借着这个机会践行“写少、少写,写好”。今天谈谈如何对比多个机器学习算法的性能,阅读本文需要基本的统计检验知识,比如明白...

    小莹莹
  • 数据思索与应用:数据分析的方法

    这里记录着小编对于数据的一些思考和反想, 希望对大家有所帮助,也希望各位大佬出来指点一二,探讨如何在数据领域更好的应用。

    大数据和云计算技术
  • K8s入门手记

    撰写Dockerfile,这里的scratch表示为基础镜像的话,意味着你不以任何镜像为基础,接下来所写的指令将作为镜像第一层开始存在。

    王亚昌
  • sysctl.conf学习和调优

    ? 前言 记得第一次接触/etc/security/limits.conf和/etc/sysctl.conf时 是因为部署Oracle时要按需修改内核参数。l...

    小小科
  • 学界|北京大学王立威教授:机器学习理论的回顾与展望(一)

    本文由奕欣,夏睿联合编辑。 AI科技评论按:本文根据王立威教授在中国人工智能学会AIDL第二期人工智能前沿讲习班*机器学习前沿所作报告《机器学习理论:回顾与展望...

    AI科技评论

扫码关注云+社区

领取腾讯云代金券