ホームページ >バックエンド開発 >PHPチュートリアル >laravel' s属性アレイメソッドを使用した生モデルデータへのアクセス

laravel' s属性アレイメソッドを使用した生モデルデータへのアクセス

James Robert Taylor
James Robert Taylorオリジナル
2025-03-07 01:07:12796ブラウズ

Accessing Raw Model Data with Laravel's attributesToArray Method

雄弁さモデルを使用すると、関係や計算されたプロパティなしでコアデータベース属性のみが必要な場合があります。 LaravelのAttributestoArrayメソッドは、この生のモデルデータにアクセスするためのクリーンな方法を提供します。

<!-- Syntax highlighted by torchlight.dev -->// Basic usage
$user = User::first();
$attributes = $user->attributesToArray();
// Returns raw database attributes
// ['id' => 1, 'name' => 'John', 'email' => 'john@example.com']
モデルの変更のための監査システムを実装する実用的な例を調べてみましょう:

<!-- Syntax highlighted by torchlight.dev --><?php

namespace App\Models;

use App\Models\AuditLog;
use Illuminate\Database\Eloquent\Model;

class AuditableModel extends Model
{
    protected static function booted()
    {
        static::updated(function ($model) {
            $original = $model->getOriginal();
            $current = $model->attributesToArray();

            // Compare only actual database attributes
            $changes = array_diff($current, $original);

            if (!empty($changes)) {
                AuditLog::create([
                    'model_type' => get_class($model),
                    'model_id' => $model->id,
                    'original' => json_encode($original),
                    'changes' => json_encode($changes),
                    'user_id' => auth()->id(),
                    'timestamp' => now()
                ]);
            }
        });
    }
}

class Product extends AuditableModel
{
    protected $appends = ['formatted_price', 'stock_status'];

    public function category()
    {
        return $this->belongsTo(Category::class);
    }

    public function getFormattedPriceAttribute()
    {
        return "$" . number_format($this->price / 100, 2);
    }
}
AttributestoArrayメソッドは、データベースに保存されているモデル属性への直接アクセスを提供し、追加の計算プロパティや関係なしで生データが必要なシナリオに最適です。

以上がlaravel&#039; s属性アレイメソッドを使用した生モデルデータへのアクセスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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