ホームページ >バックエンド開発 >PHPチュートリアル >Eloquent モデルにカスタム属性を追加するにはどうすればよいですか?

Eloquent モデルにカスタム属性を追加するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-30 03:38:02766ブラウズ

How Can I Add Custom Attributes to Eloquent Models?

Eloquent モデルへのカスタム属性の追加

Laravel/Eloquent モデルをカスタム属性で拡張する機能は、モデル表現を強化するために不可欠です。デフォルトでは、モデルはテーブル列に対応する属性を公開します。ただし、多くの場合、データベースにクエリを実行せずに追加のデータや計算にアクセスすることが望ましいです。

モデルのロード時にカスタム属性を設定することが課題の 1 つです。デフォルトの toArray() メソッドは、テーブル列に直接マップしないアクセサーを除外します。この制限を克服するには:

Laravel バージョン >= 8:

ゲッター関数で Attribute クラスを使用します。これにより、テーブルの列に直接関係のないカスタム属性を定義できます。

<code class="php">class EventSession extends Eloquent {
    ...
    public function availability()
    {
        return new Attribute(
            get: fn () => $this->calculateAvailability()
        );
    }
    ...
}</code>

Laravel バージョン 8:

2 つのオプションが利用可能です:

オプション 1: 明示的な属性設定

toArray() メソッドをオーバーライドし、手動でカスタム属性。
<code class="php">class Book extends Eloquent {
    ...
    public function toArray()
    {
        $array = parent::toArray();
        $array['upper'] = $this->upper;
        return $array;
    }
    
    public function getUpperAttribute()
    {
        return strtoupper($this->title);
    }
    ...
}</code>

オプション 2: カスタム アクセサーによるループ

すべての変更された属性を反復処理し、それらを配列表現に適用します。
<code class="php">class Book extends Eloquent {
    ...
    public function toArray()
    {
        $array = parent::toArray();
        foreach ($this->getMutatedAttributes() as $key)
        {
            if (! array_key_exists($key, $array)) {
                $array[$key] = $this->{$key};
            }
        }
        return $array;
    }
    ...
}</code>

これらのテクニックを利用することで、開発者は Eloquent モデルをカスタム属性で拡張し、モデルの表現を強化し、アプリケーションの機能を強化できます。

以上がEloquent モデルにカスタム属性を追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。