Eloquentはモデルの属性を設定したり取得したりする時に、内容を変更できる便利な方法を提供しています。この属性内容を変換するメソッドをアクセッサとミューテータ呼びます。
アクセッサ
メソッド名は、get属性名Attribute() とします。属性名はテーブルの項目名がスネークケースで命名されていても、キャメルケースで記述する必要があるので注意してください。
class Article extends Model { ... public function getTitleAttribute($value) { // 大文字に変換 return mb_strtoupper($value); } }
ミューテータ
メソッド名は、set属性名Attribute() とします。
class Article extends Model { ... public function setTitleAttribute($value) { // 小文字に変換 $this->attributes['title'] = mb_strtolower($value); } }
https://laravel.com/docs/5.6/eloquent-mutators
日付ミューテータ
Elocuent にはデフォルトで日付ミューテータが備わっていて、created_at, updated_at 属性は PHP の DateTime を拡張した Carbon のインスタンスに変換されます。日付ミューテータを使用する属性を Eloquent に知らせるには、dates 配列に属性名を追加します。
class Article extends Model { ... // published_at で日付ミューテータを使う protected $dates = ['published_at']; ... }
https://laravel.com/docs/5.6/eloquent-mutators#date-mutators
published_at を日付ミューテータに指定する前
>>> $article = App\Article::first(); >>> $article->published_at => "2015-02-24 10:22:54" // ただの文字列じゃん >>> >>> $article->published_at = "2015-02-24 11:00:00" => "2015-02-24 11:00:00" >>> $article->published_at => "2015-02-24 11:00:00" // ただの文字列じゃん >>> exit
published_at を日付ミューテータに指定した後
>>> $article = App\Article::first(); >>> $article->published_at => Illuminate\Support\Carbon @1535126513 {#2866 date: 2018-08-25 01:01:53.0 Asia/Tokyo (+09:00), } // 便利な Carbon が返ってくる >>> >>> $article->published_at = "2018-08-25 12:00:00" => "2018-08-25 12:00:00" >>> $article->published_at => Illuminate\Support\Carbon @1535166000 {#2856 date: 2018-08-25 12:00:00.0 Asia/Tokyo (+09:00), } // 便利な Carbon が返ってくる >>>
Carbonに関しては以下のサイトを参照ください。「PHP Carbon」で検索すると日本語の情報も見つかります。
http://carbon.nesbot.com/
https://github.com/briannesbitt/Carbon