[PHP/Laravel] Eloquentモデルで初期値(デフォルト値)を設定したいときは$attributesを触ってなんとかする。

どうもこんにちは。

今回言いたいことは、すでにタイトルで9割ぐらい説明し終わってしまっているのですが、一応そこに思い至った経緯と詳細を書き連ねておこうと思います。

データモデルのデフォルト値を予め決めておきたい場合、Migrationのロジックの中でdefault()を使えば設定できますが、これはデータソースに対する操作なので、あまり適切ではないと考えました。(データソースが変わればそんなメソッドは簡単に使えなくなってしまうため。)

デフォルト値は業務ルールに関わる事が多いので、なるべくドメインモデルに当たる箇所に入れるべきだと思いました。
そこで、デフォルト値を入れたいEloquentモデルのコード内に、以下のように記述しました。

これで、新規にモデルを生成したときに、対象プロパティにデフォルト値が挿入されます。

この辺の説明、Laravelのリファレンスには無かったとです(´;ω;`)

以下の記事を参考にしました。
How to set a default attribute value for a Laravel / Eloquent model?

[laravel] 既存のユーザー情報を「認証済み」にしてテストケースを進めたい

Webアプリケーションを作ってると、目的の画面へ行ってアサートを走らせる前に、必ずユーザー認証を済ませて置かねばならないケースが多々あります。というかそんなパターンが大多数なんじゃないかと思わなくもない……

Laravelさんはそのへんもぬかりなく、actingAs()メソッドで簡単に実現してくれます。

以下リファレンスから引用。

でも、リファレンスの例文通りに動かすと、認証用にユーザーを作り、DBに書き込んでから動かしているみたいで、なんというかめんどくさいです(´・ω・`)

俺の場合はSeederで予めユーザーデータを定義してあるので、できればそっちを使ってテストしたいんですよね……。
そういう時は↓のように書くといけるみたいです。

Eloquentのfindメソッドで取ってくるだけ。actingAsメソッドの引数は、Authenticatableインターフェースが実装されていればなんでもいいので、こんな書き方でいけるみたいです。

ちょーかんたん。