Lumenのテーブル名を既存のものに合わせる

lumenやlaravelではモデル名が単数形で、DBのテーブル名はその複数形、が基本の仕様となっている。
なので、新規にテーブル名を作成する場合や、テーブル名が複数形であればとくに問題ないのだが、
既存のテーブル名を利用する際に単数形となってしまっている時には明示的に指定してやる必要がある。
指定はEloquentを利用してやる。

Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

lumenでの利用

lumenではデフォルトではEloquentの利用がオフになっている。
なので、bootstrap/app.php内のコメントアウトを外して有効にしてやる。

$app->withEloquent();

モデルの作成

モデルは、app/以下に作成する。
例えば、user、というテーブル名を利用したい場合は、app/User.phpを作成してやる。
その中で、protected $tableの箇所がテーブル名を指定している箇所となるので、ここで単数形のテーブル名を指定してやる。

1
2
3
4
5
6
7
8
9
10
11
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
    protected $table = ‘user’;
    protected $fillable = [
        ‘name’,
        ‘username’,
        ‘password’
    ];
    protected $hidden = [ ‘password’ ];
}

利用

マイグレーションは作成しなくても動作した。
(項目をDBとコードで同期させる時にartisanから利用するよう。lumenでも利用できる)

以下の様な形で取得できた。

DB::table('user')->get();

参考

Eloquent ORMの基本的な使用法 | WinRoadのLaravel4初心者講座
Enable Eloquent ORM in Laravel Lumen micro-framework — Medium

   このエントリーをはてなブックマークに追加