LoginSignup
7
7

More than 5 years have passed since last update.

Laravel Eloquentを既存テーブルで使う

Posted at

やりたいこと

既存プロジェクトでのLaravel( http://laravel.jp/ )の利用。
EloquentはLaravelで使えるORMだが、デフォルトでのテーブル構造が決まっているので
既存プロジェクトでルールから逸脱している場合には、そのままでは使うことができません。
とはいえ強力な機能なので、利用するための設定ポイントをまとめます。

環境

PHP 7.0
Laravel 5.3.29
MySQL 5.7

本題

早速ですが、以下が最終的なEloquent Modelの実装です。

<?php

use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{

    // 変更点1
    const CREATED_AT = 'registered_date';
    const UPDATED_AT = 'last_update';

    protected $table = 'comment_t';// 変更点2
    protected $primaryKey = 'comment_id';// 変更点3
    protected $fillable = ['body'];

    public function __construct(array $attributes = [])
    {
        parent::__construct($attributes);
    }
}

下記のようなテーブルを想定します。
Eloquentのデフォルトから考えると、テーブル名・主キー・登録日時・更新日時が変わっています。

CREATE TABLE `comment_t` (
  `comment_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `body` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `registered_date` datetime NOT NULL,
  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`comment_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

詳細を見ておくと

変更点1
    // 変更点1
    const CREATED_AT = 'registered_date';
    const UPDATED_AT = 'last_update';

登録日時・更新日時はクラス定数として定義されており、それぞれデフォルトでは

  • created_at
  • updated_at

となっています。それぞれの名称が異なる場合は上記のように定数を上書きします。

変更点2
    protected $table = 'comment_t';// 変更点2

次はテーブル名です。プロパティ $table として定義されていて、
デフォルトではクラス名の複数形(今回だとcomments)となっています。

変更点3
    protected $primaryKey = 'comment_id';// 変更点3

次は主キーの指定です。プロパティ $primaryKey として定義されていて、
デフォルトではidとなっています。

まとめ

無事に既存テーブルでEloquentを使うことができました。
全体設計次第では利用しないこともありますが、強力な機能なので選択肢として持っていられるのは良い事ですね。
LaravelはAPIドキュメントがかなり使いやすいので、この他でも利用方法に困った時にはドキュメントを見てみると解決方法が見つかる事が多いです。ありがたい。
https://laravel.com/api/5.3/

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7