我正在使用VentureCraft/revisionable软件包,它在自述文件中向我展示了如何显示具有修订版本的模型的修订版本:
@foreach($account->revisionHistory as $history )
<li>
{{ $history->userResponsible()->first_name }}
changed {{ $history->fieldName() }}
from {{ $history->oldValue() }}
to {{ $history->newValue() }}
</li>
@endforeach
但是我想要一个特定用户完成的所有修订的列表。如何实现的?因此,我可以显示一个特定用户完成的修订历史。
答案 0 :(得分:3)
我从来没有使用过这个包。但是根据我所看到的,您应该可以在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
时间戳。
您有两种可能:
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'));
}
答案 1 :(得分:-1)
我无法使用该程序包,但似乎很容易理解。如果可以显示用户的历史记录,则应将其添加到“用户”实体中:
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();
}
我认为答案与您想做什么相对应。