Я никогда не использовал этот пакет.Но исходя из того, что я вижу, вы сможете добавить это в свою User
модель
public function revisions()
{
return $this->hasMany(\Venturecraft\Revisionable\Revision::class)
}
, а затем
@foreach($user->revisions as $history )
<li>
{{ $user->first_name }}
changed {{ $history->fieldName() }}
from {{ $history->oldValue() }}
to {{ $history->newValue() }}
</li>
@endforeach
Как вы и просили в комментариях:
Но мне не хватает сущности, которая изменилась в этом списке.
(необязательно) Я бы реализовал интерфейс для моих ревизионных моделей с чем-то вроде:
<?php
namespace App\Contracts;
interface RevisionableContract {
public function entityName();
}
Тогда во всех моих моделях, использующих RevisionableTrait:
<?php
namespace App\Models;
class MyModel extend Eloquent implements RevisionableContract {
use RevisionableTrait;
// (required)
public function entityName(){
return 'My Entity name';
}
}
Наконец:
@foreach($user->revisions as $history )
<li>
{{ $user->first_name }}
changed {{ $history->fieldName() }}
from {{ $history->oldValue() }}
to {{ $history->newValue() }}
on the entity {{ $history->historyOf()->entityName() }}
</li>
@endforeach
historyOf()
может возвращаться false
У вас также есть идея, как я могу составить список всех ревизий в порядке убывания с этой информацией пользователя?
Из файла миграции я вижу, что он имеет отметки времени created_at
и updated_at
.
У вас есть две возможности:
- Inваш
view
, вы можете напрямую заказать их на вашем collection
следующим образом:
@foreach($user->revisions->sortByDesc('created_at') as $history )
Когда вы получаете много ревизий для пользователя, у вас, вероятно, будут проблемы с производительностью, и вам придется разбивать их на страницы.Начиная с вашего
controller
, вам придется сортировать их и разбивать на страницы в вашем
query
вместо
collection
.
public function index()
{
$user = User::find(1);
$revisions = $user->revisions()->orderBy('created_at')->paginate(15);
return view('your.view', compact('user', 'revisions'));
}