Awesome
LaravelとEloquentの永続化パターンのサンプル
laravel.osaka #12のスライド用のサンプルコード。
簡単なTodo管理Webアプリの要件としてTodoItemInterfaceとTodoItemRepositoryInterfaceを6パターンで実装した例。
Laravelパッケージとして実装
インストール
# 作業ディレクトリを作成
mkdir lara-todo-app
cd lara-todo-app
# このリポジトリをクローン
git clone https://github.com/n1215/lara-todo-persistence
# Laravelアプリケーションを作成
composer create-project --prefer-dist laravel/laravel
cd laravel
# ローカルのComposerパッケージをインストール
composer config repositories.local path "../lara-todo-persistence"
composer require n1215/lara-todo-persistence
# .envのDBドライバを変更 sqliteが手軽
# マイグレーション
php artisan migrate
Web API
cd lara-todo-app/laravel
php artisan serve
- 一覧: GET http://localhost:8000/todo
- 追加: POST http://localhost:8000/todo
- 詳細: GET http://localhost:8000/todo/1
- 完了: PUT http://localhost:8000/todo/1
実装したインターフェース
実装6パターン
- 1 Eloquent ModelをEntityとする
- 2 EntityがEloquent Modelを中に持つ
- 3 POPOのEntityとEloquent Model
- 4 POPOのEntityとQuery Builder
- 5 POPOのEntityとPDO
- 6 POPOのEntityとAtlas ※ Atlas → http://atlasphp.io/
実装切り替え
コンフィグをpublish
cd lara-todo-app/laravel
php artisan vendor:publish --tag=laratodo-config
config/laratodo.phpのimplの数値を書き換える
<?php
return [
/**
* 実装クラスの切り替え 1〜6
* 1 => Impls\EloquentAsEntity\TodoItemRepository::class
* 2 => Impls\EntityContainsEloquent\TodoItemRepository::class
* 3 => Impls\POPOAndEloquent\TodoItemRepository::class
* 4 => Impls\POPOAndQueryBuilder\TodoItemRepository::class
* 5 => Impls\POPOAndPDO\TodoItemRepository::class
* 6 => Impls\POPOAndAtlas\TodoItemRepository::class
*/
'impl' => 1,
];