php – Joomla! 使用第三方 Eloquent 取代 JDatabase 連接資料庫

 

修改 Plugin

承上篇文章,我們修改系統外掛中的 onAfterInitialise() 事件

<?php
defined('_JEXEC') or die;

class plgSystemMylib extends JPlugin
{
    public function __construct(&$subject, $config)
    {
        parent::__construct($subject, $config);
    }

    // 3. 建立連接 Eloquent 方法
    private function eloquent()
    {
        // 4. 註冊方便的 查詢建構器 (query builder) 別名到全域類別 DB
        class_alias('Illuminate\Database\Capsule\Manager', 'DB');

        $db = new \DB;
         
        $db->addConnection([
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'database'  => 'joomla',
            'username'  => 'root',
            'password'  => '',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ]);
         
        $db->setAsGlobal();
        $db->bootEloquent();
    }

    public function onAfterInitialise()
    {
        JLoader::registerNamespace('Jsnlib', JPATH_LIBRARIES . '/src');
        
        // 1. 載入 composer autoload
        require_once JPATH_ROOT . '/vendor/autoload.php';

        // 2. 呼叫 
        $this->eloquent();
    }

    
}

 

這樣未來在任何模型 Model 中,都可以自由地直接使用如

$builder = \DB::table("yoi5u_something");
$builder->select(['*']);
$builder->where("s_id", $param->s_id);
$result = $builder->get();

 

可以參考 如何將 Eloquent 應用在非 Laravel Framework 中

 

發表迴響