DBに対応するカラムがなく、既存のカラムを加工または判定したものを別名で取り出したい時のやり方について。

今回、郵便番号検索を実装する事になった。データベースには郵便番号データが入っていて、入力された郵便番号を元に都道府県・市区町村名・町域名を取得して入力画面上に表示させたいというもの。都道府県は以下の配列から生成されるドロップダウンとなっているので都道府県名ではなく都道府県コードが欲しいのだけどデータベースには入っていなかった。

[
    1 => '北海道', 
    // 省略
    47 => '沖縄',
]

全国地方公共団体コード(カラム名:jis_code)の先頭2桁が都道府県コードとして使えそうだったので以下のアクセサを作成した。

public function getPrefectureIdAttribute()
{
    return intval(substr($this->jis_code, 0, 2));
}

そしてModelの$appendsプロパティに定義してあげればオッケー。

protected $appends = ['prefecture_id'];