スリムフレームワークで Laravel の Eloquent ORM を使用する方法

New Media Campaigns で小さなスリムフレームワークアプリケーションを作成しています。このアプリケーションは社内利用のためで、作成しながら新しいことを学ぶつもりで行いました。データベーススキーマは非常に単純ですが、Taylor Otwell によるフルスタックフレームワークである Laravel と、その多くのコンポーネントが PackagistComposer パッケージとして利用可能で、すばらしいものだと聞きました。

そこで、スリムフレームワークアプリケーションで Laravel の Eloquent ORM を使用することにしました。この方法でどうやって実装したのかという質問を多くの読者からいただきました。以下がその方法です。

ファイル構造

次のようにアプリケーションを organizes します。public/ ディレクトリが仮想ホストのドキュメントルートです。

app/
    models/
        Book.php
public/
    index.php
vendor/
composer.json

インストール

まず、スリムフレームワークと Eloquent ORM をプルダウンしてインストールするように composer.json ファイルを準備します。composer.json ファイルは次のようになります。

{
    "require": {
        "slim/slim": "*",
        "illuminate/database": "*"
    }
}

完了したら、composer install を実行してアプリケーションの依存関係をインストールします。

Eloquent ORM のブートストラップ

次に、Composer に Composer の autoload.php ファイルを必要とするアプリケーションの依存関係を自動的にロードするように指示します。

// Autoload our dependencies with Composer
require '../vendor/autoload.php';

これで Eloquent ORM をブートストラップし、データベース接続情報を渡します (自分のユーザー名、パスワード、データベース名を追加してください)。

// Database information
$settings = array(
    'driver' => 'mysql',
    'host' => '127.0.0.1',
    'database' => '',
    'username' => '',
    'password' => '',
    'collation' => 'utf8_general_ci',
    'prefix' => ''
);

// Bootstrap Eloquent ORM
$connFactory = new \Illuminate\Database\Connectors\ConnectionFactory();
$conn = $connFactory->make($settings);
$resolver = new \Illuminate\Database\ConnectionResolver();
$resolver->addConnection('default', $conn);
$resolver->setDefaultConnection('default');
\Illuminate\Database\Eloquent\Model::setConnectionResolver($resolver);

Eloquent ORM がブートストラップされると、Eloquent 抽象モデルを拡張するモデルを作成して使用できます。この例では、データベースに title と author の列を含む books という名前のテーブルが存在することを前提としています。

class Book extends \Illuminate\Database\Eloquent\Model
{

}

このモデルファイルを index.php にインクルードし、スリムアプリケーションのルートで Eloquent ORM モデルを使用します。

// Create Slim app
$app = new \Slim\Slim();

$app->get('/foo', function () {
    // Fetch all books
    $books = \Book::all();
    echo $books->toJson();

    // Or create a new book
    $book = new \Book(array(
        'title' => 'Sahara',
        'author' => 'Clive Cussler'
    ));
    $book->save();
    echo $book->toJson();
});

$app->run();

スリムフレームワークと Eloquent ORM に関するより詳細なチュートリアルを読みたい場合は、Phil Sturgeon による Composer を使用して PHP コンポーネントを組み合わせて照合する をお読みください。

コーディングをお楽しみください!