• Czas czytania ~1 min
  • 20.01.2025

Podczas pracy z modelami Eloquent czasami potrzebne są tylko podstawowe atrybuty bazy danych bez relacji lub obliczonych właściwości. Metoda attributesToArray firmy Laravel zapewnia przejrzysty sposób uzyskiwania dostępu do tych nieprzetworzonych danych modelu.

// Basic usage
$user = User::first();
$attributes = $user->attributesToArray();
// Returns raw database attributes
// ['id' => 1, 'name' => 'John', 'email' => '[email protected]']

Przyjrzyjmy się praktycznemu przykładowi implementacji systemu audytu zmian modelu:

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

Metoda attributesToArray zapewnia bezpośredni dostęp do atrybutów modelu przechowywanych w bazie danych, dzięki czemu idealnie nadaje się do scenariuszy, w których potrzebne są surowe dane bez dodatkowych obliczonych właściwości lub relacji.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

O

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

O autorze CrazyBoy49z
WORK EXPERIENCE
Kontakt
Ukraine, Lutsk
+380979856297

Codziennie zestrzeliwujemy „Shahedy”. Za każdym razem to uratowane życie. Potrzebujemy mobilności: busa lub przyczepy. Każda wpłata = kolejna noc pod ochroną.

🚐 Zbiórka na busa dla zespołu, pułk 1020 🎯 Cel: 500 000 ₴
🔗 Link do zbiórkiі 💳 4441 1111 2546 4663