【Laravel】対象カラムの型を調べる方法(gettype)

※本サイトはアフィリエイトリンクを掲載しています。
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->boolean('flag')->comment('真偽値');
            $table->timestamps();
        });
    }

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

マイグレーションファイルでflagカラムをboolean型で設定しました。

しかし、Laravelでboolean型で作成した場合、mysqlではtinyint(1桁)型になります。

値はtrueの場合は1、falseの場合は0となります。

 

membersテーブル

カラム
id bigint(20) 1
name varchar(20) テスト太郎
flag tinyint(1) 1

 

では、flagをモデルのcastsを使用して型をboolean型に変換したいと思います。

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

このとき実際に、型が変換されているのかをデバックして確認したい。

 

実現方法①:gettype()

phpのgettype()メソッドを使用します。

 

デバック方法

use App\Models\Member;

$flag = Member::first()->flag;
dd(gettype($flag));

 

デバック結果

元々はtinyint型だったのが、castsによってboolean型に変換されたことが確認できました。

 

実現方法②:DBの型を調べてモデルで型変換されいるかを調べる

Model(モデル)castsアクセサで型変換されていなければ、基本的にはデータベースで設定した型になっているはずです。

そのため、データベースを見てモデルのcastsで型定義されているかを調べれば調査が可能です。

 

手順①:データベースのカラムの型を見る

今回はDB閲覧ツールのA5:SQLMk-2を使用して、カラムの型を確認します。

対象テーブルのカラムタブを表示すると、添付のようにデータ型を確認することができます。

 

手順②:Model(モデル)のcastsの定義内容を確認する

対象のmodelファイルのソースコードを直接見て確認しても良いですが、今回はdd()でデバックして確認します。

 

デバック方法

use App\Models\Member;

$member = Member::first();
dd($member);

 

デバック結果

castsの項目でflagがbooloan型に変換されていることが確認できました。

仮に、castsでflagが未設定であればデータベースの型のままになるのでtinyint型になります。

 

コメント