如何在 ThinkPHP 中整合 Laravel Eloquent ORM

前言

以前維護的舊項目採用的 ThinkPHP 3.2,後面學習了 Laravel 後,以爲 TP 的 Model 功能沒有 Laravel 強大和方便,並想把 Laravel 裏的 Eloquent 用在 TP 裏。php

好在 Laravel 的 ORM 是獨立成包的,能夠用於符合要求的其餘 PHP 系統中。html

整合

要使用的是 illuminate/databasegit

  • 安裝 illuminate/database
    根據本身使用的 PHP 版本,經過 composer 安裝對應的 illuminate/database 版本,例如github

composer require illuminate/database:5.3.*
  • 接入到 TP 中
    在 ThinkPHPLibraryThinkThink.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 的 vendorilluminatesupporthelpers.php 方法中存在一個方法composer

/**
     * 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 方法衝突。ide

/**
 * 拋出異常處理
 * @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 了。ui

tips

  • TP 的數據庫通常不會有 created_at 和 updated_at 字段,而 illuminate/database 會自動維護這兩個字段,因此須要在建立的 Model 文件裏,添加以下代碼spa

public $timestamps = false;

本文排版遵守 中文文案排版指北(簡體中文版)

Enjoy it !若是以爲文章對你有用,能夠請我喝杯咖啡~

相關文章
相關標籤/搜索