用 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 SQL防注入代码集合
Apr 25 PHP
一漂亮的PHP图片验证码实例
Mar 21 PHP
PHP获取文件相对路径的方法
Feb 26 PHP
php+html5实现无刷新图片上传教程
Jan 22 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
Feb 08 PHP
PHP静态成员变量
Feb 14 PHP
php获取网站根目录物理路径的几种方法(推荐)
Mar 04 PHP
php动态读取数据清除最右边距的方法
Apr 12 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
Nov 17 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
详细解读php的命名空间(二)
Feb 21 PHP
thinkphp5+layui实现的分页样式示例
Oct 08 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实现读取超大文件的方法
2014/07/28 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
jQuery+css实现的tab切换标签(兼容各浏览器)
2016/01/28 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
基于react框架使用的一些细节要点的思考
2017/05/31 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
谈谈vue中mixin的一点理解
2017/12/12 Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
2020/08/27 Javascript
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python基于Tkinter库实现简单文本编辑器实例
2015/05/05 Python
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
2018/01/24 Python
运行django项目指定IP和端口的方法
2018/05/14 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
从pandas一个单元格的字符串中提取字符串方式
2019/12/17 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
2020/04/15 Python
python批量生成条形码的示例
2020/10/10 Python
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
泰国汽车、火车和轮渡票预订网站:Bus Online Ticket
2017/09/09 全球购物
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
Trip.com澳大利亚:在线旅行社
2019/12/01 全球购物
怎么处理XML的中文问题
2015/03/26 面试题
法学专业应届生求职信
2013/10/16 职场文书
2014公司党员自我评价范文
2014/09/11 职场文书
信用卡工资证明格式
2014/09/13 职场文书
2014年营销工作总结
2014/11/22 职场文书
庆祝教师节主题班会
2015/08/17 职场文书
吃通javascript正则表达式
2021/04/21 Javascript
goland 恢复已更改文件的操作
2021/04/28 Golang
python使用pywinauto驱动微信客户端实现公众号爬虫
2021/05/19 Python
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
springboot layui hutool Excel导入的实现
2022/03/31 Java/Android