【Laravel】Model(モデル)の$castsで型を定義する。(casts型一覧)

※本サイトはアフィリエイトリンクを掲載しています。
Laravel

なぜModelの$castsで型を定義する必要があるのか

データベースから取得してきたデータの型を、$castsで定義した型に変換することが可能です。

ケースによりますが、データベースから取得してきた型を変換する必要がある場合があります。

例を挙げて、解説します。

 

データベースにboolean型でカラムをセットした場合

Laravelではマイグレーションを使用してテーブル作成をします。

今回は例としてmembersテーブル作成時にflagカラムに真偽値を登録します。

真偽値のため型をboolean型でセットしてみます。

<?php

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

class CreateMembersTable extends Migration
{
    /**
    * Run the migrations.
    *
    * @return void
    */
    public function up()
    {
        Schema::create('members', function (Blueprint $table) {
            $table->id();
       $table->string('name')->comment('名前');
            $table->string('address')->comment('住所');
            $table->string('tel')->comment('電話番号');
            $table->boolean('flag')->comment('真偽値');
            $table->timestamps();
        });
    }

    /**
    * Reverse the migrations.
    *
    * @return void
    */
    public function down()
    {
        Schema::dropIfExists('members');
    }
}

しかし、boolean型はtrueやfalseの真偽値を直接保持できるわけではありません。

Laravelでカラムの型をbooloan型で設定した場合、mysqlではデータ型はtinyint(1)になります。

そのため、trueの場合は1falseの場合は0で登録する必要があります。

この場合、データを取得時は1または0int型を取得するので、trueまたはfalseでデータを取得したい場合は$castsで型変換する必要が出てきます。

 

$castsの書き方

モデルの中に$castsを配列で定義します。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Member extends Model
{
    use HasFactory;

    protected $guarded = [
        'id',
    ];
    protected $casts = [
        'name' => 'string',
        'flag' => 'boolean'
    ];

 }

 

$castsの型一覧

型一覧

  • array
  • AsStringable::class
  • boolean
  • collection
  • date
  • datetime
  • immutable_date
  • immutable_datetime
  • decimal:<digits>
  • double
  • encrypted
  • encrypted:array
  • encrypted:collection
  • encrypted:object
  • float
  • integer
  • object
  • real
  • string
  • timestamp

 

コメント