🔥

Codeigniter3でLaravelのEloquentを使いたい

2018/05/27に公開

社内のプロジェックトではLaravelとCodeigniterを使っていて
CodeigniterでもLaravelのEloquentを使いたいと思って導入したのでメモ代わりに残しておく。

illuminate/databaseをcomposerでインストール

composer require illuminate/database

index.phpでvendor/autoload.phpを読み込む

index.php
/*
 * --------------------------------------------------------------------
 * LOAD THE COMPOSER AUTOLOADFILE
 * --------------------------------------------------------------------
 */
require_once '../vendor/autoload.php';

/*
 * --------------------------------------------------------------------
 * LOAD THE BOOTSTRAP FILE
 * --------------------------------------------------------------------
 *
 * And away we go...
 */
require_once BASEPATH.'core/CodeIgniter.php';

configのautoloadではEloquent modelを継承したクラスは対象外となるので
requireでautoload.phpを読み込む。
(ファイル最下部のCodeIgniter.phpの読み込みの上あたりに追記)

database.phpにDBコネクション周りを追記する

https://github.com/illuminate/database
(githubのREADME通りに記述した)

database.php
use Illuminate\Database\Capsule\Manager as Capsule;

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'username',
	'password' => 'password',
	'database' => 'database',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);

$capsule = new Capsule;

$capsule->addConnection([
    'driver'    => 'mysql',
    'host'      => $db['default']['hostname'],
    'database'  => $db['default']['database'],
    'username'  => $db['default']['username'],
    'password'  => $db['default']['password'],
    'charset'   => $db['default']['char_set'],
    'collation' => $db['default']['dbcollat'],
    'prefix'    => $db['default']['dbprefix']
]);
	
// Set the event dispatcher used by Eloquent models... (optional)
use Illuminate\Events\Dispatcher;
use Illuminate\Container\Container;
$capsule->setEventDispatcher(new Dispatcher(new Container));


// Make this Capsule instance available globally via static methods... (optional)
$capsule->setAsGlobal();

// Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher())
$capsule->bootEloquent();

Illuminate\Database\Eloquent\Modelを継承したModelを作成する

User.php
<?php
use Illuminate\Database\Eloquent\Model as Eloquent;

class User extends Eloquent
{
	# テーブル名を指定する
	protected $table = 'users';
	# 主キーのデフォルトのカラム名が「id」で設定されているのでカラム名が違う場合はprimaryKeyを指定する
	protected $primaryKey = 'user_id';
}

ControllerでModelを呼び出してみる

User_data.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class User_data extends CI_Controller {

	public function __construct()
	{
		parent::__construct();
		# modelの読み込み
		$this->load->model('user');
	}
	
	public function index()
	{
		$user['rows'] = User::all()->toArray();

		$this->load->view('user_data/index', $user)
	}

Eloquentで使える関数は使用可能なので公式ドキュメントを参照すること。
https://readouble.com/laravel/5.5/ja/eloquent.html

参考にさせてもらったサイト
CodeigniterでLaravelのEloquentを使う

Discussion