ホームページ制作/SEO対策なら株式会社サイバーブレーンへ

 03-5961-5681 平日10:00~19:00

 2018-08-17

LaravelでMySQLのプライマリーキーにZEROFILLを指定する

プライマリーキーには別のユニークな数値を割り当てれば済む話ですが、
都道府県コードのように01から47まで単純かつ綺麗に連番が振られている場合、
余計なカラムを追加せず、「01」を「1」にせず、そのまま使いたくなります。

じゃそうしなよと言われそうですが、Laravelのマイグレーションで使用できる
カラムタイプにはZEROFILLを指定できないので(〜5.6)、生SQLで指定するか
テーブル生成後に直接変更することになり、さらにはモデルを引っ張った際の
格納データは0パディングされない数値に変換されます。(通常はそのまま文字列)

これを0パディングされた状態で利用したい場合、その都度変換するのは面倒過ぎるのでこんな時にはモデルクラスにアクセサを定義します。

//カラム名がpref_codeの場合
public function getPrefCodeAttribute($value) {
        return sprintf(“%02d”, $value);
}

とすると、

//出力値は01のように0パディングされている
echo $model->pref_code;

ちなみに、codeを以下のようにどちらで指定しても結果は同じです。

$model = Pref::find(1);
$model = Pref::find(’01’);

このようにアクセサは値を変更することはもちろん、存在しないカラムもプロパティとして追加できたりするのでとても便利ですが、多用すると他の人に負荷がかかるのでほどほどにした方が良いと思います。

~この記事の著者~

サイト制作に関するご相談はこちら

 03-5961-5681 平日10:00~19:00

メールフォーム

あなたが
サイトに
求める要素
あなたがサイトに求める0要素