ホームページ > バックエンド開発 > PHPチュートリアル > オブジェクトのロード時にLaravelモデルのカスタム属性を取得するにはどうすればよいですか?

オブジェクトのロード時にLaravelモデルのカスタム属性を取得するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-10-29 12:43:29
オリジナル
732 人が閲覧しました

How to Retrieve Custom Attributes in Laravel Models on Object Load?

オブジェクトのロード時に Laravel モデルのカスタム属性を取得する

問題:

手動ループに依存せずに、モデルの読み込み時に Laravel/Eloquent モデルのカスタム属性/プロパティにアクセスします。

解決策:

Laravel 8 :

ゲッター関数を使用してカスタム属性を属性として定義します:

<code class="php">class EventSession extends Eloquent {
    public function availability() {
        return new Attribute(
            get: fn() => $this->calculateAvailability()
        );
    }
}</code>
ログイン後にコピー

Laravel 8-:

方法 1: カスタム属性を $appends 配列に追加し、対応するアクセサーを作成します:

<code class="php">class EventSession extends Eloquent {
    protected $appends = ['availability'];

    public function getAvailabilityAttribute() {
        return $this->calculateAvailability();
    }
}</code>
ログイン後にコピー

メソッド 2: 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>
ログイン後にコピー

方法 3: toArray() の変更された属性を反復処理します:

<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;
    }

    public function getUpperAttribute() {
        return strtoupper($this->title);
    }
}</code>
ログイン後にコピー

以上がオブジェクトのロード時にLaravelモデルのカスタム属性を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート