• Время чтения ~1 мин
  • 20.01.2025

При работе с моделями Eloquent иногда нужны только основные атрибуты базы данных без связей и вычисляемых свойств. Метод Laravel's attributesToArray предоставляет простой способ доступа к этим необработанным данным модели.

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

Давайте рассмотрим практический пример реализации системы аудита изменений модели:

<?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 предоставляет прямой доступ к атрибутам модели, хранящимся в базе данных, что делает его идеальным для сценариев, где вам нужны необработанные данные без дополнительных вычисляемых свойств или отношений.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

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...

Об авторе CrazyBoy49z
WORK EXPERIENCE
Контакты
Ukraine, Lutsk
+380979856297

Мы сбиваем «шахеды» каждый день. Каждое сбитие — спасённые жизни. Нам нужна мобильность: бус или прицеп. Каждый донат = ещё одна ночь под защитой.

🚐 Сбор на микроавтобус для моего экипажа, полк 1020 🎯 Цель: 500 000 ₴
🔗 Ссылка на банку 💳 4441 1111 2546 4663