LumenでOracle接続

## はじめに
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.*"
```
- 参考：https://github.com/yajra/laravel-oci8

## プロバイダの設定
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
|--------------------------------------------------------------------------
|


```
- 参考(with Lumenのところ)：https://yajrabox.com/docs/laravel-oci8/master/installation

## 接続設定
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