原文发表在个人我的网站:给 CI 插上翅膀——在 CodeIgniter 2 中使用 Laravel Eloquent ORMphp
本教程示例代码见 https://github.com/johnlui/CodeIgniter-2-with-Eloquenthtml
CodeIgniter 框架和 Laravel 框架基本能够看作是以前若干年和这两年的 PHP 框架霸主,使用率和出镜率最高的框架。mysql
CI 是一个轻型框架,只提供了 路由、MVC 分离、视图加载器、Active Record 等一些基本功能,但这偏偏是其使用率高的缘由:提供的东西少而精,适用于绝大多数场景。CI 的文档堪称开源软件的典范,很是之清晰、详尽,对新手很是友好,十分容易上手。laravel
Laravel 是这两年刚刚兴起的重型全功能框架,能够极大地提升开发效率,可是 Laravel 4 的文档并无 3 那么清晰,中文资料也很是少,不少人在学习的时候遇到了比较大的困难。例如复杂的路由系统让不少用惯了 CI 自动映射的人无所适从,文档又只有寥寥几句话,致使至关一部分人被拦在了使用框架的第一步,学习的热情也被浇灭。git
我前段时间写了系列教程 Laravel 4 系列入门教程【最适合中国人的Laravel教程】,访问量和反响都还不错,须要的人能够看看。github
繁琐的路由让不少人怀念 CI 的自动映射,繁重的框架基础工做(一个 Hello World 页面须要载入 150 多个文件)也让 Laravel 的性能在一些场景下不能知足要求。不少人用了一段时间后发现,Laravel 中的 Eloquent ORM 是跟 CI 比最强大的地方,因而就想把 Eloquent 移植到 CI 上,我之前也想过,无奈实力不够无从下手。如今终于知道怎么搞了,下面咱们正式开始。sql
PHP 版本要求 >= 5.4,这是 Eloquent 的最低要求。数据库
下载 CodeIgniter 2.2.0,地址是 http://www.codeigniter.com/download,下载完成后解压到某个地方,配置好 HTTP 服务软件,把网站跑起来。若是你已经看到了如下画面,就能够继续往下作了:json
咱们使用 Composer 来载入和管理 Eloquent。Composer 会生成一个自动加载(autoload
)文件,咱们只须要 require
这个文件,就能够使用全部经过 Composer 安装的包。如今咱们要在 CodeIgniter 项目中使用 Composer,在其根目录下新建 composer.json:app
{ "require": { "php": ">=5.4.0", "illuminate/database": "*" }, }
而后运行 composer update
,稍等片刻,Composer 体系建立完成,同时 illuminate/database 包也已经安装完成。
而后新建 application/third_party/eloquent.php
:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); use Illuminate\Database\Capsule\Manager as Capsule; // Autoload 自动载入 require BASEPATH.'../vendor/autoload.php'; // 载入数据库配置文件 require_once APPPATH.'config/database.php'; // Eloquent ORM $capsule = new Capsule; $capsule->addConnection($db['eloquent']); $capsule->bootEloquent(); ``` 这个文件将会帮咱们引入 Composer 的自动加载文件,同时会帮咱们初始化 Eloquent,这个文件载入了一个数据库配置文件,在 `application/config/database.php` 的最后新增(注意替换数据库名称和密码): ```php $db['eloquent'] = [ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'ci', 'username' => 'root', 'password' => 'password', 'charset' => 'utf8', 'collation' => 'utf8_general_ci', 'prefix' => '' ]; ``` 接下来我么须要在 CI 应用启动的时候引入上面那个文件,在最外面的 `index.php` 的后部增长: ```php /* * -------------------------------------------------------------------- * LOAD Laravel Eloquent ORM * -------------------------------------------------------------------- * */ require APPPATH.'third_party/eloquent.php'; ``` > 注意,这段代码必定要放在 `require_once BASEPATH.'core/CodeIgniter.php';` 这一行的 ***前面***! 而后,开始使用 Eloquent,修改 `application/controllers/welcome.php` 中的 `index()` 为: ```php public function index() { $data['article'] = Article::first(); $this->load->view('home', $data); } ``` 新建 `application/views/home.php` 文件: ```php <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>CI2 with Eloquent</title> </head> <body> <h1> <?php echo $article->title; ?> </h1> <div class="content"> <p> <?php echo $article->content; ?> </p> </div> </body> </html>
如今让咱们向数据库中填充须要使用的数据,运行 SQL 语句:
DROP TABLE IF EXISTS `articles`; CREATE TABLE `articles` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) DEFAULT NULL, `content` longtext, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; LOCK TABLES `articles` WRITE; /*!40000 ALTER TABLE `articles` DISABLE KEYS */; INSERT INTO `articles` (`id`, `title`, `content`) VALUES (1,'我是标题',' <h3>我是内容呀~~</h3> <p>我真的是内容,不信算了,哼~ O(∩_∩)O</p> '), (2,'我是标题',' <h3>我是内容呀~~</h3> <p>我真的是内容,不信算了,哼~ O(∩_∩)O</p> '); /*!40000 ALTER TABLE `articles` ENABLE KEYS */; UNLOCK TABLES;
而后创建模型,新建 application/models/Article.php
文件:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); /** * Article Model */ class Article extends Illuminate\Database\Eloquent\Model { public $timestamps = false; }
最后,修改 composer.json
将 models 文件夹加入自动加载:
{ "require": { "php": ">=5.4.0", "illuminate/database": "*" }, "autoload": { "classmap": [ "application/models" ] } }
运行 composer dump-autoload
,刷新页面!你将看到如下画面:
恭喜你!Eloquent 嫁接到 CodeIgniter 2 成功!
CodeIgniter 3 正处于 DEV 阶段,原生支持 Composer,能够直接修改 composer.json 文件,配置方式和 2 彻底一致。