用 Composer构建自己的 PHP 框架之使用 ORM


Posted in PHP onOctober 30, 2014

回顾

经过前三篇文章 基础准备 、 构建路由 和 设计 MVC ,我们已经得到了一个结构比较完整的 MVC 架构的 PHP 微框架,但是距离一个真正能够上手使用的框架还差一样东西: 数据库封装 ,本篇就将讲述如何集成一个 ORM Composer 包 。

本篇是本系列最后一篇,接下来我可能会以 让我们开了又开的 Composer 包 为系列标题分享一些体验和感悟,将主要发表在本站上。

正文

我们选择 Laravel 的 illuminate/database 作为我们的 ORM 包。我试用了几个著名的 ORM,发现还是 Laravel 的 Eloquent 好用!让我们开心的 ORM,开了又开! :-D

在本系列教程里,每一个 Composer 包都要满足以下基本要求:

原生依赖 Composer 进行管理
在好用的基础上尽量简单(比如我们那个超简单的路由包)
尽量新,用上 PHP 的新特性

说到 PHP 的新特性,有句题外话。 PHP5.3 引入了命名空间,这是规划在 PHP6 中的功能,所以 PHP5.3 在一定程度上其实就是 PHP6 ,PHP 的下一个版本是 PHP7 ,即将发布,主要贡献者是大名鼎鼎的 鸟哥 @Laruence 。另外本台前方记者(就是我)刚刚从微博发来报道,鸟哥正在放大招,制造传说中 PHP7 on JIT ,我大 PHP 的历史车轮是无法阻挡的哈哈哈!:-P

安装 illuminate/database

给 composer.json 增加一个 require 项:

"illuminate/database": "*"
运行 composer update ,等待安装完成。

使用 Eloquent

修改 public/index.php 为:

<?php
use Illuminate\Database\Capsule\Manager as Capsule;
// Autoload 自动载入
require '../vendor/autoload.php';
// Eloquent ORM
$capsule = new Capsule;
$capsule->addConnection(require '../config/database.php');
$capsule->bootEloquent();
// 路由配置
require '../config/routes.php';

新增 config/database.php (注意替换数据库密码):

<?php
return [
  'driver'    => 'mysql',
  'host'      => 'localhost',
  'database'  => 'mffc',
  'username'  => 'root',
  'password'  => 'password',
  'charset'   => 'utf8',
  'collation' => 'utf8_general_ci',
  'prefix'    => ''
  ];

修改 models/Article.php :

<?php
/**
* Article Model
*/
class Article extends Illuminate\Database\Eloquent\Model
{
  public $timestamps = false;
}
  

controllers/HomeController.php 无需改动。

刷新,页面依旧:

用 Composer构建自己的 PHP 框架之使用 ORM

恭喜你!Eloquent 使用成功!

Eloquent 更多用法

Eloquent 异常强大 ,可以说是 Laravel 中 最特别 、 最有价值 的部分。
像 HomeController 中调用的 Article::first() ,之前用了十几行代码,现在什么都不用干,继承一个类就行了。

Eloquent 更多用法参见:Eloquent ORM 中文文档

其他著名 ORM

还有很多著名的 ORM 和 Datamapping(数据库迁移等) 包,参见: ORM and Datamapping

ORM 能够大幅提高提高开发效率,Eloquent 真乃神器也!
虽然 web 届各语言阵营都在不断推出新的所谓 快速开发框架 ,终归还是越来越像 Rails 。Eloquent 在表面上几乎是最像 Rails 的 ORM 的了,但是跟 Rails 不能比啊,Ruby 的超强面向对象特性可不是盖的。Laravel 作者 Taylor Otwell 接受采访时曾表示,Eloquent 是整个 Laravel 中最难实现的部分。我在调试的时候也发现, MFFC/vendor/illuminate/database/Illuminate/Database/Eloquent/Model.php 这个文件有 3000 多行......

目前建造一个丰满的可以上手使用的 PHP 框架的工作就算是基本完成了,接下来我会继续完善 MFFC 框架,让她更加丰富、好用!

以后可能会有 模板引擎、表单验证、发送邮件、权限体系管理、异步队列、视频音频处理(乱入:-D) 等内容,敬请关注还未出世的 让我们开了又开的 Composer 包 系列文章。

谢谢大家的阅读和陪伴!再见!

PHP 相关文章推荐
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
Jul 04 PHP
PHP Stream_*系列函数
Aug 01 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
Dec 19 PHP
Admin generator, filters and I18n
Oct 06 PHP
从零开始学YII2框架(二)通过 Composer 安装扩展插件
Aug 20 PHP
ThinkPHP多语言支持与多模板支持概述
Aug 22 PHP
PHP魔术方法的使用示例
Jun 23 PHP
PHP实现支持加盐的图片加密解密
Sep 09 PHP
详解PHP归并排序的实现
Oct 18 PHP
PHP实现一个简单url路由功能实例
Nov 05 PHP
PHP 500报错的快速解决方法
Dec 14 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
Oct 30 #PHP
用 Composer构建自己的 PHP 框架之构建路由
Oct 30 #PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
Oct 30 #PHP
用 Composer构建自己的 PHP 框架之基础准备
Oct 30 #PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
Oct 30 #PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
Oct 30 #PHP
thinkphp中html:list标签传递多个参数实例
Oct 30 #PHP
You might like
PHP 批量删除 sql语句
2009/06/05 PHP
php中adodbzip类实例
2014/12/08 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
JavaScript下利用fso判断文件是否存在的代码
2010/12/11 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
flash遮住div问题的正确解决方法
2014/02/27 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
js判断子窗体是否关闭的方法
2015/08/11 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
2018/09/04 Javascript
[15:56]Heroes18_暗影萨满(完美)
2014/10/31 DOTA
[01:36]极致酷炫!TI9典藏宝瓶+撼地者至宝展示
2019/06/11 DOTA
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
小白入门篇使用Python搭建点击率预估模型
2018/10/12 Python
使用Python+wxpy 找出微信里把你删除的好友实例
2019/02/21 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题
2021/01/19 HTML / CSS
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
运动会入场词200字
2014/02/15 职场文书
采购求职信
2014/03/17 职场文书
党风廉政建设调研报告
2015/01/01 职场文书
自我检讨报告
2015/01/28 职场文书
团日活动总结格式
2015/05/11 职场文书
围城读书笔记
2015/06/26 职场文书
简历自我评价范文
2019/04/24 职场文书
2019年XX公司的晨会制度及流程!
2019/07/23 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python