LaravelのEloquentモデルで主キーのゼロ始まりの文字列からゼロが落ちる

こんにちは、さるまりんです。

LaravelのEloquentモデルを使っていてちょっとハマったのでメモしておきます。

マイグレーションの機能を使って↓のようなテーブルを作りました。

public function up()
{
    Schema::create('items', function (Blueprint $table) {
        $table->string('item_id', 10)->primary();
        $table->string('item_name', 128);
        $table->timestamps();
    });
}

テーブルitemsの主キーはitem_id、このカラムはVARCHAR(10)で作成されます。

item_idに格納されるのは10桁の数字で

1111234589

5003443127

のような文字列です。

が、

0000001234

のように、ゼロ始まりの場合があります。

これで

php artisan make:model Item

して、Eloquentモデルを作成し、プログラムの中でitem_idにアクセスしてみました。

$current_item_id = $item->item_id;

これをするとゼロ始まりでなければ問題ないのですが、ゼロ始まりのものはゼロが落ちてしまいました。
上の例でいうと

0000001234

1234

になってしまいます。

これをどう避けるか。

簡単なことでした。

作成されたモデルクラスに

public $incrementing = false;

を加えると良いようです。

Laravel 6以降は主キーのタイプを指定できるので、↓も合わせて設定するのが良さそうです。

protected $keyType = 'string';

このゼロが落ちてしまう現象ですが、今回は主キーでしたが、外部キーでも起きるよう。
注意が必要ですね。

ゼロがなくなってしまって驚きましたが、これでもう大丈夫。

読んでくださってありがとうございました。

それではまた!