用 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使用$_POST或$_SESSION[]向js函数传参
Sep 16 PHP
php程序员应具有的7种能力小结
Nov 27 PHP
php实现的SESSION类
Dec 02 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
Mar 18 PHP
php从文件夹随机读取文件的方法
Jun 01 PHP
PHP常用的排序和查找算法
Aug 06 PHP
Discuz!X中SESSION机制实例详解
Sep 23 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
Nov 10 PHP
分享50个提高PHP执行效率的技巧
Dec 26 PHP
thinkphp跨库操作的简单代码实例
Sep 22 PHP
PHP上传文件及图片到七牛的方法
Jul 25 PHP
PHP实现字符串的全排列详解
Apr 24 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
虫族 Zerg 热键控制
2020/03/14 星际争霸
谷歌音乐搜索栏的提示功能php修正代码
2011/05/09 PHP
Youku 视频绝对地址获取的方法详解
2013/06/26 PHP
yii2.0实现pathinfo的形式访问的配置方法
2016/04/06 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
php多线程并发实现方法
2016/09/30 PHP
超级退弹代码
2008/07/07 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
利用try-catch判断变量是已声明未声明还是未赋值
2014/03/12 Javascript
JQuery为元素添加样式的实现方法
2016/07/20 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
Chrome调试折腾记之JS断点调试技巧
2017/09/11 Javascript
vue2.0 better-scroll 实现移动端滑动的示例代码
2018/01/25 Javascript
微信小程序实现的一键连接wifi功能示例
2019/04/24 Javascript
JS实现横向轮播图(中级版)
2020/01/18 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
JavaScript中遍历的十种方法总结
2020/12/15 Javascript
用python写asp详细讲解
2013/12/16 Python
Python使用Scrapy爬取妹子图
2015/05/28 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
2016/10/12 Python
浅谈Python中的私有变量
2018/02/28 Python
python验证码识别教程之滑动验证码
2018/06/04 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
Python字典推导式将cookie字符串转化为字典解析
2019/08/10 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
html5的画布canvas——画出简单的矩形、三角形实例代码
2013/06/09 HTML / CSS
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
C/C++程序员常见面试题一
2012/12/08 面试题
新年晚会主持词
2014/03/24 职场文书
竞争与合作演讲稿
2014/05/12 职场文书
大四毕业生自荐书
2014/07/05 职场文书
司法局群众路线教育实践活动整改措施
2014/09/17 职场文书
杭州西湖英语导游词
2015/02/03 职场文书
班级班风口号大全
2015/12/25 职场文书
Python使用MapReduce进行简单的销售统计
2022/04/22 Python