Laravel 属性のキャストについて

Laravel Laravel

はじめに

Laravelの学習をしている時にModelsの中に protected $casts と書かれたコードを見つけたので調べたったで!

Laravelの標準機能なのかカスタマイズで実装された機能なのか分からないことが多いけど今回はググったら速攻出てきたから助かったw

属性のキャストとは

では早速。。。Laravelの日本語版ドキュメントにも記載がありました!

属性のキャストは、モデルに追加のメソッドを定義しなくても、アクセサやミューテータと似た機能を提供します。モデルのcastsメソッドで、属性を一般的なデータ型に変換する、便利な方法を提供します。

castsメソッドから、キーがキャストする属性の名前、値にそのカラムをキャストする型の配列を返します。

引用元:公式ドキュメント

ん〜絶妙にほわっとしたイメージはできますね。

例えば、ユーザー情報を管理するテーブルusersで、is_activeという列が存在し、そのデータベースのカラムがintegerで管理されているとします。

この値が利用される際に、integerではなく、booleanとして扱いたい時がありますよね?

(ちなみにis_activeはユーザーの有効/無効を管理するカラムです)

そんな時に使うのが!そう!属性のキャストです〜👏

基本的な使い方

まずはModelクラスのUserモデルにcastsプロパティを使ってキャストを定義します。

class User extends Model
{
    protected $casts = [
        'is_active' => 'boolean',
    ];
}

この状態でController側でUserの情報を取得して分岐条件に指定するとします。

実際にusersテーブルに登録されているデータがこちら。(という設定)

idnameis_active
1test_user10
2test_user21

↓のコードを実行するとid=1のユーザはis_activeが0なのでfalseになります。

$users = User::all(); // 全てのユーザーを配列で取得
foreach ($users as $user) {
    if ($user->is_active) {
        echo 'is_active is true';
    } else {
        echo 'is_active is false';
    }
}

なので「is_active is false」がechoされます。

id=2のユーザーはis_activeが1なので、trueになります。

echoされる結果は「is_active is true」となります。

簡単ですね!

データとして持っている型と実際に使う方が常時異なる場合は属性のキャストを使うと効率的かつメンテナンスが楽になりそうだなと感じました!

最後に

今回初めての記事を書かせていただきましたがどうでしたか?

文章をまとめる力もまだまだ弱い完全感覚頼りのエンジニアですが、トップエンジニアを目指して勉強をしているので、これを機に積極的にアウトプットしていこうと思います!

仕事が忙しくてもなるべく更新頻度を高くいたいと考えているので、また読みに来てくださると嬉しいです笑

最後まで読んでいただきありがとうございました!

コメント

タイトルとURLをコピーしました