こんにちは、さるまりんです。
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';
このゼロが落ちてしまう現象ですが、今回は主キーでしたが、外部キーでも起きるよう。
注意が必要ですね。
ゼロがなくなってしまって驚きましたが、これでもう大丈夫。
読んでくださってありがとうございました。
それではまた!