本教程示例代码见 https://github.com/johnlui/My-First-Framework-based-on-Composer


回顾

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

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


正文

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

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

  1. 原生依赖 Composer 进行管理
  2. 在好用的基础上尽量简单(比如我们那个超简单的路由包)
  3. 尽量新,用上 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 为:

<?phpuse 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 (注意替换数据库密码):

<?phpreturn ['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 无需改动。

刷新,页面依旧:

恭喜你!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 框架 TinyLara。http://tinylara.com

https://lvwenhan.com/php/409.html

利用 Composer 一步一步构建自己的 PHP 框架(四)——使用 ORM相关推荐

  1. composer mysql_利用 Composer 一步一步构建自己的 PHP 框架(四)——使用 ORM

    利用 Composer 一步一步构建自己的 PHP 框架(四)--使用 ORM 2014-10-16 / 阅读数:65457 / 分类: PHP 回顾 经过前三篇文章 基础准备 . 构建路由 和 设计 ...

  2. 设计php框架_利用 Composer 一步一步构建自己的 PHP 框架(三)——设计 MVC

    利用 Composer 一步一步构建自己的 PHP 框架(三)--设计 MVC 2014-10-14 / 阅读数:50438 / 分类: PHP 终于可以 "一次编写,到处发布" ...

  3. 基于postfix一步一步构建Mailserver,支持虚拟用户,支持WebMail

    我们来一步一步来构建MailServer,支持虚拟用户.虚拟域,支持Webmail,支持Mysql.这个实验化了两天的时间完成的,其中各种崎岖,认真的照着做,问题不大.不过新手还是不要做这个了,需要整 ...

  4. CV:基于keras利用cv2自带两步检测法对《跑男第六季第五期》之如花片段(或调用摄像头)进行实时性别脸部表情检测

    CV:基于keras利用cv2自带两步检测法对<跑男第六季第五期>之如花片段(或调用摄像头)进行实时性别&脸部表情检测 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心 ...

  5. 一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-演示使用报表构建UI-入库业务查询模块...

    回顾与说明 前面我们把"商品字典"."商品入库"."商品库存查询"三个模块已经概括或者详细的演示完了,这些模块涉及到简单数据的增.删.修,也 ...

  6. 一步一步构建手机WebApp开发——页面布局篇

    继上一篇:一步一步构建手机WebApp开发--环境搭建篇过后,我相信很多朋友都想看看实战案例,这一次的教程是页面布局篇,先上图: 如上图所示,此篇教程便是教初学者如何快速布局这样的页面.废话少说,直接 ...

  7. 一步一步构建量化交易系统

    第一步:解决你的交易理念. 1.1 首先要解决的是你的交易理念,所以第一部分主要就是解决交易理念的问题,交易理念非常非常重要,交易理念是摆在首位的. 1.2 交易理念是决定你能否成功的关键!只要交易理 ...

  8. 一步一步教你如何利用JTAG救活砖头多普达838

    一步一步教你如何利用JTAG救活砖头多普达838 本帖最后由 阿青 于 2009-12-5 16:29 编辑 以下教程我是在网上看到的,据说是国外 Xda-Forum 和 PDA-Hack 论坛上的, ...

  9. 一步一步用jenkins,ansible,supervisor打造一个web构建发布系统

    新blog地址:http://hengyunabc.github.io/deploy-system-build-with-jenkins-ansible-supervisor/ 一步一步用jenkin ...

  10. 各种金融类的自定义 View,基金走势图、分时图、蜡烛图、各种指标等,一步一步构建庞大的基金自定 View...

    inancialCustomerView 项目地址:Tophold/FinancialCustomerView  简介:各种金融类的自定义 View,基金走势图.分时图.蜡烛图.各种指标等,一步一步构 ...

最新文章

  1. 【FFmpeg】ffmpeg中函数返回的错误码:AVERROR及AVERROR_*
  2. 2020 年度最佳的23个机器学习项目!(附源代码)
  3. 阅读作业二:团队项目与测试工作
  4. CodeIgniter配置之config
  5. 应用层为何不能设置分辨率
  6. linux删除了mount目录,Linux记录-分区(df/fdisk/mount/umount/fuser)
  7. python 3d绘图立方体_python绘制3D立方体
  8. canvas绘制字体-属性设置2
  9. 在VB6.0中怎么实现escape和unescape
  10. 构造函数和方法的区别
  11. 线性表(单链表)—图书管理系统 c语言版
  12. 前端之HTML视频、音频
  13. 华表Cell应用 - 在IE中使用华表Cell插件 | #华表Cell #报表
  14. android实现activity半透明色
  15. python斐波那契数列计算_python计算斐波那契数列
  16. 动态规划入门及规则分析(典型)
  17. Linux运维技术之Linux云计算架构
  18. 学习中的一些笔记,不懂的时候再来翻翻(持续更新)
  19. 开发笔记-内表指针赋值
  20. 《清单革命》对程序开发的一些启示

热门文章

  1. python拆分合并文件_python实现文件的分割与合并
  2. eclipse出现String错误,问题已解决
  3. 安卓 App 库存系统开发 基础版本
  4. mysql查询结果作为附件_python3+mysql查询数据并通过邮件群发excel附件
  5. java动态删除属性值_JavaBean动态添加删除属性
  6. 截取文件最后10行_10 行 Python 代码自动清理电脑内重复文件,解放双手
  7. 德媒:外景代替了现实 中国人拍婚纱照跑到很远地方
  8. VB 获取计算机的分辨率大小
  9. 宝宝头三年影响一生[转]
  10. linux redhat命令大全