美文网首页Thinkphp
如何在 ThinkPHP 中整合 Laravel Eloquen

如何在 ThinkPHP 中整合 Laravel Eloquen

作者: X先生说 | 来源:发表于2017-04-11 11:02 被阅读630次

    前言

    之前维护的旧项目采用的 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 !

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

    版权声明

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

    相关文章

      网友评论

      本文标题:如何在 ThinkPHP 中整合 Laravel Eloquen

      本文链接:https://www.haomeiwen.com/subject/udheattx.html