Під час роботи з моделями Eloquent іноді потрібні лише основні атрибути бази даних, без зв'язків або обчислених властивостей. Метод attributesToArray у Laravel надає зручний спосіб доступу до цих сирих даних моделі.
// Основне використання
$user = User::first();
$attributes = $user->attributesToArray();
// Повертає сирі атрибути бази даних
// ['id' => 1, 'name' => 'John', 'email' => 'john@example.com']
Розглянемо практичний приклад реалізації системи аудиту змін моделі:
<?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();
// Порівнюємо лише фактичні атрибути бази даних
$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 забезпечує прямий доступ до атрибутів моделі, як вони зберігаються в базі даних, що робить його ідеальним для ситуацій, коли вам потрібні сирі дані без додаткових обчислених властивостей або зв'язків