配列を文字列として保存したり、取得時に文字列から配列にしたいといったように、DBからのデータ取得・保存時に値を加工するやり方を紹介します。
Eloquentモデルで値を加工する
Eloquentモデル
内に下記の記述をすることで値の取得・保存時に加工を自動で行うことができます。
// Eloquentで値を取得する際に自動で呼ばれる
// カラム名はアッパーキャメルケース
public function getカラム名Attribute($value)
{
// 値を加工する処理
// 加工後の値をリターン
return 加工後の値
}
// Eloquentで値を保存する際に自動で呼ばれる
// カラム名はアッパーキャメルケース
public function setカラム名Attribute($value)
{
// 値を加工する処理
// Eloquentモデルが持つattributeプロパティに加工後の値をセット
// リターンは必要ない
$this->attributes['カラム名'] = 加工後の値
}
getカラム名Attribute()
はデータの取得時に呼ばれます。value
が取得される値なのでvalue
を加工してリターンします。
setカラム名Attribute()
はデータの保存時に呼ばれます。加工後の値をEloquentモデル
のattribute
プロパティに、カラム名をキーとして加工後の値をセットします。この時リターンは必要ありません。
以上で、Eloquentでのget()やfind()でデータ取得する際に加工された値を取得でき、save()などで加工された値を保存できるようになります。
単にキャストをしたい場合
Eloquentモデル
内に下記の記述をすることで値の取得・保存時に指定した型に自動でキャストされます。
protected $casts = [
'カラム名' => '型名',
];