Laravel 9 でattributeを書く

こんにちは!とびろぐ管理人のとびうおです!

今回はLaravel 9でattributeを書いていこうと思います!

とびうおくん
とびうおくん

arrtibuteには

laravel 9 からattributeの書き方ができるようになっています!

attributeの書き方(Larabel8まで)

今までのattributeの書き方は、以下のような形です。

public function getNameAttribute()
{
return $this->first_name.$this->last_name;
}

のように書くことが普通でした!

これで、

$user->name

をするとfirst_nameとlast_nameを足したattributeを作成できました。

新しい書き方

ではlaravel 9以降の新しい書き方です。

protected function name(): Attribute
    {
        return Attribute::make(
            get: fn() => $this->first_name.$this->last_name,
        );
    }
とびうおくん
とびうおくん

なんかLaravelがすごい不思議にやっていたところが、

ある程度自分で表現している感じがしますね

このように書くことができます。

解説

では実際に解説をしていきます。

Attribute::make()

というメソッドで、attributeを指定しているというわけです。

そして、

get: fn() => $this->first_name.$this->last_name,

というので、どういうのを返すかというのを決めているわけです。

ここでは無名関数といったものも使っていますが、個人的に一番でかいのは、以下のようなことができるという点です(attributeでやるべきか?というのはありますが)

protected function initialPassword(): Attribute
    {
        return Attribute::make(
            get:function ($value) {
                if (! Hash::check($value, $this->password)) {
                    return "パスワード変更済み";
                }
                return $value;
            }
        );
    }

これは、initialPassword(初期パスワード)が変更されていたら変更済みと出すようにしているプログラミングですが、昔のattributeの書き方で以下のように書くと、エラーが起きてしまいます。

protected function getInitialPasswordAttribute()
    {
        return
                if (! Hash::check($this->initail_password, $this->password)) {
                    return "パスワード変更済み";
                }
                return $value;
    }
とびうおくん
とびうおくん

これができるようになったのは個人的にかなりでかいです..!

まとめ

このようにlaravel 9以降ではattributeの新しい書き方ができます!

とびうおくん
とびうおくん

みんなも新しい書き方でかこう!

その他のLaravelの記事

トビログでは様々なLaravelの記事を公開しています。ぜひ、見てみてくださいね!

Laravel
「Laravel」の記事一覧です。
とびうお
ブログ管理人です!
swimaneというアプリをリリースしました!

コメント

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