如何在 ThinkPHP 中整合 Laravel Eloquent ORM

前言

之前维护的旧项目采用的 ThinkPHP 3.2,后面学习了 Laravel 后,觉得 TP 的 Model 功能没有 Laravel 强大和方便,并想把 Laravel 里的 Eloquent 用在 TP 里。

好在 Laravel 的 ORM 是独立成包的,可以用于符合要求的其他 PHP 系统中。

整合

要使用的是 illuminate/database

  • 安装 illuminate/database
    根据自己使用的 PHP 版本,通过 composer 安装对应的 illuminate/database 版本,例如
composer require illuminate/database:5.3.* 
  • 接入到 TP 中
    在 ThinkPHP\Library\Think\Think.class.php 文件中的 start方法的最后一行的 App::run(); 上方添加如下代码:
$capsule = new \Illuminate\Database\Capsule\Manager;
$capsule->addConnection([
            'driver'    => C('DB_TYPE'),
            'host'      => C('DB_HOST'),
            'database'  => C('DB_NAME'),
            'username'  => C('DB_USER'),
            'password'  => C('DB_PWD'),
            'charset'   => C('DB_CHARSET'),
            'collation' => C('DB_COLLATION'),
            'prefix'    => C('DB_PREFIX'),
]);
$capsule->setAsGlobal();
$capsule->bootEloquent();
  • 解决 E 方法冲突
    illuminate/database 的 vendor\illuminate\support\helpers.php 方法中存在一个方法
  /**
     * Escape HTML special characters in a string.
     *
     * @param  \Illuminate\Contracts\Support\Htmlable|string  $value
     * @return string
     */
 function e($value)
    {
        if ($value instanceof Htmlable) {
            return $value->toHtml();
        }
    
        return htmlspecialchars($value, ENT_QUOTES, 'UTF-8', false);
    }

与 TP 的 E 方法冲突。

/**
 * 抛出异常处理
 * @param string $msg 异常消息
 * @param integer $code 异常代码 默认为0
 * @throws Think\Exception
 * @return void
 */
function E($msg, $code=0) {
    throw new Think\Exception($msg, $code);
}

我选择注释了 illuminate/database 的方法,搜索后发现没有其他地方用到这个方法,故注释。

完成后就可以愉快地使用 Laravel 的 ORM 来 coding 了。

tips

  • TP 的数据库一般不会有 created_at 和 updated_at 字段,而 illuminate/database 会自动维护这两个字段,所以需要在创建的 Model 文件里,添加如下代码
public $timestamps = false;

本文排版遵照 中文文案排版指北(简体中文版)

Enjoy it !

如果觉得文章对你有用,可以请我喝杯咖啡~

版权声明

转载请注明作者和文章出处
作者: X先生
首发于 http://www.jianshu.com/p/d5d1a9b7720c

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 先说几句废话,调和气氛。事情的起由来自客户需求频繁变更,伟大的师傅决定横刀立马的改革使用新的框架(created ...
    wsdadan阅读 3,128评论 0 12
  • 原文链接 必备品 文档:Documentation API:API Reference 视频:Laracasts ...
    layjoy阅读 8,651评论 0 121
  • 过去做事情急,什么东西拿起来就用,不喜欢进行系统性的学习,造成在使用过程中的错误和低效,现在感觉自己耐心多了,用之...
    马文Marvin阅读 2,056评论 0 10
  • 这些天心里颇不宁静。身体无端地出现了许多不适,求医问药百般折腾,再加上工作繁琐之事,更觉人生无味。是...
    anhaoqingtian阅读 462评论 7 9