はじめに

LumenでOracle接続するのに色々調べたのでまとめました。
手順通りでうまくいかない等あれば教えていただけると幸いです。

前提

  • Lumenのプロジェクトを作成している
  • oracleサーバ・クライアントが既にある

oracleサーバ構築等は以下のページがおすすめです。
https://qiita.com/lethe2211/items/0bb493fa93a0088cfac9

環境

ミドルウェア バージョン
PHP 7.1.9
Lumen 5.6.3
laravel-pdo-via-oci8 1.3.6

oracleドライバのインストール

Lumenプロジェクト作成後、composer.jsonがあるところで以下のコマンドを実行

composer require yajra/laravel-oci8:"5.6.*"

プロバイダの設定

bootstrap/app.phpに以下の3行を追加

$app->withFacades();
$app->withEloquent();
$app->register(Yajra\Oci8\Oci8ServiceProvider::class);

▽Applicationインスタンス生成後に定義しました

/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| Here we will load the environment and create the application instance
| that serves as the central piece of this framework. We'll use this
| application as an "IoC" container and router for this framework.
|
*/

$app = new Laravel\Lumen\Application(
    realpath(__DIR__.'/../')
);

$app->withFacades();

$app->withEloquent();

$app->register(Yajra\Oci8\Oci8ServiceProvider::class);
/*
|--------------------------------------------------------------------------
| Register Container Bindings
|--------------------------------------------------------------------------
|


接続設定

config/database.phpを新しく作成してconnection「oracle」を追加します(connection名は任意の名前でOK)

<?php
return [
    'migrations' => 'migrations',
    'connections' => [
        'oracle' => [
            'driver'    => 'oracle',
            'host'      => 'test_host',
            'port'      => '1521',
            'database'  => 'test_database',
            'service_name' => 'test_service_name',
            'username'  => 'test_user',
            'password'  => 'test_pass',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ],
    ],
];

※database.phpにベタ書きしておりますが、環境で分けたい場合は「.env」ファイルを活用してください。

ちなみに自分は既存のtnsnames.oraを元に上記設定を行ったので、対応箇所を記載いたします。
▽tnsnames.ora

TNS_NAME =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ①)(PORT = ②))
    (CONNECT_DATA =
      (SERVICE_NAME = ③)
    )
   )
database.phpのカラム 該当箇所
driver oracle
host tnsnames.oraの①
port tnsnames.oraの②
database tnsnames.oraの③
service_name tnsnames.oraの③
username oracleに接続できるユーザ名
password ユーザ名に紐づくパスワード
charset 文字コード(日本語を扱うならutf8)

残りのカラムは参考ページのコピペです。

使用側

class TestModel extends Model
{
    // コネクション名「oracle」に紐づくDBから「TEST」テーブルの情報を取得する
    protected $connection = 'oracle';
    protected $table = 'TEST';

    public static function getData($id)
    {
        $query = self::where('id', $id);
        return $query->get()->toArray();
    }
}

参考まとめ

https://github.com/yajra/laravel-oci8
https://yajrabox.com/docs/laravel-oci8/master/installation
https://www.youtube.com/watch?v=i9C2thlgOg8
https://qiita.com/lethe2211/items/0bb493fa93a0088cfac9

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.