やりたいこと
既存プロジェクトでの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
const CREATED_AT = 'registered_date';
const UPDATED_AT = 'last_update';
登録日時・更新日時はクラス定数として定義されており、それぞれデフォルトでは
- created_at
- updated_at
となっています。それぞれの名称が異なる場合は上記のように定数を上書きします。
protected $table = 'comment_t';// 変更点2
次はテーブル名です。プロパティ $table
として定義されていて、
デフォルトではクラス名の複数形(今回だとcomments)となっています。
protected $primaryKey = 'comment_id';// 変更点3
次は主キーの指定です。プロパティ $primaryKey
として定義されていて、
デフォルトではidとなっています。
まとめ
無事に既存テーブルでEloquentを使うことができました。
全体設計次第では利用しないこともありますが、強力な機能なので選択肢として持っていられるのは良い事ですね。
LaravelはAPIドキュメントがかなり使いやすいので、この他でも利用方法に困った時にはドキュメントを見てみると解決方法が見つかる事が多いです。ありがたい。
https://laravel.com/api/5.3/