【CodeIgniter3】クエリービルダー(旧アクティブレコード)を拡張する方法

【CodeIgniter3】クエリービルダー(旧アクティブレコード)を拡張する方法です。

まずクラスローダー(CI_Loader)を拡張します。

ファイルを作成する場所は以下のとおりです。

application/core/MY_Loader.php

ソースコードは以下のとおりです。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class MY_Loader extends CI_Loader
{
/**
* Database Loader
*
* @param mixed $params Database configuration options
* @param bool $return Whether to return the database object
* @param bool $query_builder Whether to enable Query Builder
* (overrides the configuration setting)
*
* @return object|bool Database object if $return is set to TRUE,
* FALSE on failure, CI_Loader instance in any other case
*/
public function database($params = '', $return = FALSE, $query_builder = NULL)
{
// Grab the super object
$CI = & get_instance();
// Do we even need to load the database class?
if ($return === FALSE && $query_builder === NULL && isset($CI->db) && is_object($CI->db) && !empty($CI->db->conn_id))
{
return FALSE;
}
require_once(BASEPATH . 'database/DB.php');
require_once(BASEPATH . 'database/DB_driver.php');
// ここから拡張クエリビルダークラスを読み込む処理を追加
if (!isset($query_builder) OR $query_builder === TRUE)
{
require_once(BASEPATH . 'database/DB_query_builder.php');
if (!class_exists('CI_DB', FALSE))
{
// 拡張したクエリビルダークラスを読み込む
$query_builder_path = APPPATH . 'libraries/database/MY_DB_query_builder.php';
if (file_exists($query_builder_path))
{
require_once($query_builder_path);
}
}
}
if ($return === TRUE)
{
return DB($params, $query_builder);
}
// Initialize the db variable. Needed to prevent
// reference errors with some configurations
$CI->db = '';
// Load the DB class
$CI->db = & DB($params, $query_builder);
return $this;
}
}

次にクエリビルダーの拡張クラスを作成します。

ファイルを作成する場所は以下のとおりです。

application/libraries/database/MY_DB_query_builder.php

ソースコードは以下のとおりです。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class CI_DB extends MY_DB_query_builder{}
class MY_DB_query_builder extends CI_DB_query_builder
{
}

MY_DB_qyery_builderクラス内にメソッドを追加していけば、クエリービルダーを拡張することが出来ます。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.