Laravel revisionable 获取特定用户的所有修订列表
Laravel revisionable getting a list of all revisions by specific user
我正在使用 VentureCraft/revisionable-package,它在自述文件中向我展示了如何显示具有修订的模型的修订:
@foreach($account->revisionHistory as $history )
<li>
{{ $history->userResponsible()->first_name }}
changed {{ $history->fieldName() }}
from {{ $history->oldValue() }}
to {{ $history->newValue() }}
</li>
@endforeach
但我想要一个由特定用户完成的所有修订的列表;如何做到这一点?所以我可以显示一个特定用户完成的修订历史记录。
我从来没有用过这个包。但根据我所看到的,您应该可以将其添加到您的 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
正如您在评论中所问:
But I'm missing the Entity that's changed in that list.
(可选)我将使用类似以下内容实现我的可修订模型的接口:
<?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()
可能returnfalse
Do you also have an idea how I can make a list of all revisions in desc-order with that info of the user?
从迁移文件中,我可以看到它有 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'));
}
我无法使用那个包,但它似乎很容易理解。如果您可以显示用户的历史记录,您应该将其添加到您的 "User" 实体:
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();
}
我认为这个答案符合你想做的事情。
我正在使用 VentureCraft/revisionable-package,它在自述文件中向我展示了如何显示具有修订的模型的修订:
@foreach($account->revisionHistory as $history )
<li>
{{ $history->userResponsible()->first_name }}
changed {{ $history->fieldName() }}
from {{ $history->oldValue() }}
to {{ $history->newValue() }}
</li>
@endforeach
但我想要一个由特定用户完成的所有修订的列表;如何做到这一点?所以我可以显示一个特定用户完成的修订历史记录。
我从来没有用过这个包。但根据我所看到的,您应该可以将其添加到您的 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
正如您在评论中所问:
But I'm missing the Entity that's changed in that list.
(可选)我将使用类似以下内容实现我的可修订模型的接口:
<?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()
可能returnfalse
Do you also have an idea how I can make a list of all revisions in desc-order with that info of the user?
从迁移文件中,我可以看到它有 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'));
}
我无法使用那个包,但它似乎很容易理解。如果您可以显示用户的历史记录,您应该将其添加到您的 "User" 实体:
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();
}
我认为这个答案符合你想做的事情。