Eloquentを単体で導入している時にDBファサードを使用する方法

概要

FacadeはLaravelなら初期状態でも使用できるが、Eloquentをスタンドアロンパッケージとして導入している場合はひと手間必要。

そのままFacadeを使おうとすると

RuntimeException: A facade root has not been set.
が発生してしまう。

接続設定

Eloquentを導入している次点で接続設定は行っているはずだが念の為。
リクエスト~ルーティングの間等に接続設定を記述しておく。

接続設定
$db = new \Illuminate\Database\Capsule\Manager;
$db->addConnection([
    // setting
]);
$db->setAsGlobal();
$db->bootEloquent();

使用方法

DBファサードを使用したいクラスで以下のように記述する。

TestController,php
use \Illuminate\Database\Capsule\Manager as DB;

// 省略

try {
    $con = DB::connection();
    $con->beginTransaction();

    // transaction処理

    $con->commit();

} catch (\Exception $e) {
    $con->rollBack();
    echo $e->getMessage();
}

参考

https://stackoverflow.com/questions/35418810/eloquent-error-a-facade-root-has-not-been-set

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