実現したいこと
データ取得時に、対象カラムの型が何になっているのかを調べたい。
型を調べたい時の例
例えば、下記の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型になります。
コメント