2019-06-30に更新

【Laravel】Eloquent Tips

Eloquentを使う際にちょっと便利になるTipsをまとめてみました。
網羅性はないので参考程度に。

テーブル名の変更

$tableを定義することで任意のテーブルへのアクセス出来ます。

<?php

use Illuminate\Database\Eloquent\Model;

class Example extends Model
{
    protected $table = 'custom_example';
}

主キー名の変更

$primaryKeyを定義して変更することが可能です。

<?php

use Illuminate\Database\Eloquent\Model;

class Example extends Model
{
    // デフォルトは'id'で定義されています。
    protected $primaryKey = 'custom_key';
}

主キーの型を変更する

$keyTypeを定義して変更することが可能です。

<?php

use Illuminate\Database\Eloquent\Model;

class Example extends Model
{
    // デフォルトは'int'で定義されています。
    protected $keyType = 'string';
}

主キーのインクリメントをしないようにする

$incrementingを定義して変更することが可能です。

<?php

use Illuminate\Database\Eloquent\Model;

class Example extends Model
{
    // デフォルトはtrueで定義されています。
    protected $incrementing = false;
}

デフォルトのタイムスタンプを使用しないようにする

$timestampsを定義することでデフォルトのタイムスタンプを使用しなくなります。

<?php

use Illuminate\Database\Eloquent\Model;

class Example extends Model
{
    // デフォルトはtrueで定義されています。
    public $timestamps = false;
}

詳細はIlluminate\Database\Eloquent\Concerns\HasTimestampsを参照してください。

タイムスタンプのカラム名を変更する

モデルクラスにCREATED_ATUPDATED_ATを定義することで変更できます。

<?php

use Illuminate\Database\Eloquent\Model;

class Example extends Model
{
    const CREATED_AT = 'created';
    const UPDATED_AT = 'updated';
}

タイムスタンプのプロパティからCarbonのメソッドを実行

次のようなマイグレーションを作成します。

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateSampleTable extends Migration
{
    public function up()
    {
        Schema::create('sample', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('text');
            // created_at, updated_atカラムが追加されます。
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('sample');
    }
}

モデルクラスをSampleとした時、次のような実行が可能です。

<?php

namespace App\Http\Controllers;

use App\Sample;

class HomeController extends Controller
{
    public function index()
    {
        /** @var App\Sample $sample */
        $sample = Sample::find(1);

        // 時刻の差分を取得
        $diff = $sample->created_at->diffForHumans();
    }
}

created_atupdated_atにアクセスすると、Carbonオブジェクトに変換してくれています。
そのため、diffForHumansなどのメソッドが呼び出せます。

詳細はIlluminate\Database\Eloquent\Concerns\HasAttributesを参照してください。

また、独自にCarbonオブジェクトで受け取りたいカラムを設定したい場合は$datesを定義することで可能です。

<?php

use Illuminate\Database\Eloquent\Model;

class Example extends Model
{
    // created_at, updated_at以外のカラム名を追加します。
    protected $dates = [
        'created', 'updated'
    ];
}

参考

Originally published at choco14t.hatenablog.com
ツイッターでシェア
みんなに共有、忘れないようにメモ

choco

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント