Расширенные методы отображения только измененных данных с помощью spatie/laravel-activitylog

Пакет spatie/laravel-activitylog — это популярный пакет Laravel, который обеспечивает простой способ регистрации активности в вашем приложении. По умолчанию он регистрирует все изменения, внесенные в модель. Однако в некоторых случаях вам может потребоваться отображать пользователям только измененные данные, а не весь журнал активности. В этой статье мы рассмотрим несколько методов достижения этой цели с помощью spatie/laravel-activitylog, а также примеры кода.

Метод 1. Фильтрация изменений.
Один подход заключается в фильтрации записей журнала активности и отображении только соответствующих изменений. Этого можно добиться, используя метод changes(), предоставляемый пакетом. Вот пример:

$activity = activity()->causedBy($user)->log('Updated user details');
$changes = $activity->changes();
// Display only the changed data
foreach ($changes as $attribute => $values) {
    $oldValue = $values['old'];
    $newValue = $values['new'];
    // Display the attribute and its new value
    echo "Attribute: $attribute, New Value: $newValue";
}

Метод 2. Настройка модели журнала активности.
Другой метод — настроить модель журнала активности и переопределить метод changes()для отображения только измененных данных. Вот пример:

use Spatie\Activitylog\Models\Activity;
class CustomActivity extends Activity
{
    public function changes()
    {
        $changes = parent::changes();
        // Filter the changes and display only the relevant data
        // Modify $changes array as per your requirements
        return $changes;
    }
}

Метод 3: использование средств доступа
Вы также можете использовать средства доступа в своей модели для получения и отображения только измененных данных. Вот пример:

class User extends Authenticatable
{
    // ...
    public function getDescriptionAttribute()
    {
        $changes = $this->activity()->latest()->first()->changes();
        // Modify $changes array as per your requirements
        // Build a string with the relevant changed data
        return $description;
    }
}

В этой статье мы рассмотрели различные методы отображения только измененных данных с помощью пакета spatie/laravel-activitylog в Laravel. Фильтруя изменения, настраивая модель журнала активности или используя средства доступа, вы можете предоставить пользователям краткую информацию об изменениях, внесенных в ваше приложение. Эти методы можно адаптировать в соответствии с вашими конкретными требованиями, что позволит вам создать более целенаправленный и удобный для пользователя журнал активности.