Laravel revisionable, получая список всех ревизий определенного пользователя - PullRequest
0 голосов
/ 18 сентября 2018

Я использую VentureCraft / revisionable -пакет, и он показывает мне в ReadMe, как показать ревизии модели, имеющей ревизии:

@foreach($account->revisionHistory as $history )
    <li> 
         {{ $history->userResponsible()->first_name }} 
         changed {{ $history->fieldName() }} 
         from {{ $history->oldValue() }} 
         to {{ $history->newValue() }}
    </li>
@endforeach

Но я хочусписок всех ревизий, которые сделаны конкретным пользователем;как этого добиться?Так что я могу показать историю изменений, которые были сделаны одним конкретным пользователем.

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Я не мог использовать этот пакет, но, кажется, это довольно легко понять.Если вы можете показать историю пользователя, вы должны добавить это к вашей сущности «Пользователь»:

public function history()
{
    return $this->hasMany(\Venturecraft\Revisionable\Revision::class, 'user_id', 'id');
}

Или, если вы хотите отфильтровать определенную изменяемую сущность, вы должны сделать это так:

public function historyForUser(User $user)
{
    return $this->morphMany(\Venturecraft\Revisionable\Revision::class, 'revisionable')->where('user_id' , '=', $user->getKey())->getResults();
}

Я думаю, что ответ соответствует тому, что вы хотите сделать.

0 голосов
/ 21 сентября 2018

Я никогда не использовал этот пакет.Но исходя из того, что я вижу, вы сможете добавить это в свою 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.

У вас есть две возможности:

  1. 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'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...