多态 Laravel 审计包 - 检索多态审计
Polymorphic Laravel Auditing Package - Retrieving polymorphic audits
我目前正在使用 Laravel 审计 (Owen-it) 包来自动审计模型,使用以下代码效果很好。
class Staff extends Model implements Auditable
{
use \OwenIt\Auditing\Auditable;
use SoftDeletes;
}
class Customer extends Model implements Auditable
{
use \OwenIt\Auditing\Auditable;
use SoftDeletes;
}
鉴于这些 classes 上有大量字段(> 20),我打算将这些 classes 转换为多态关系,其中所有公共字段都位于基础中class 和任何 class 独特的属性将进入各自的 classes。
例如-基数class:
class User extends Model implements Auditable
{
use \OwenIt\Auditing\Auditable;
use SoftDeletes;
}
目前我使用类似这样的东西来检索审计:
$staff = App\Model\Staff::find($id);
$allAudits= $staff->audits;
我的问题是有没有一种干净的方法来检索整个基础和变形的所有审计class?
提前致谢。
My question is then is there a clean way to retrieve all audits across the base and morphed class?
您可以将以下方法添加到您的基础 class 以获取所有审核:
public function getAllAudits(): Collection
{
return Audit::where(function ($query) {
$query->where('auditable_type', get_class($this))
->where('auditable_id', $this->id);
})
->orWhere(function ($query) {
$morph = $this->userable; // or whatever morph relation name you have set
$query->where('auditable_type', get_class($morph))
->where('auditable_id', $morph->id);
})
->get();
}
我目前正在使用 Laravel 审计 (Owen-it) 包来自动审计模型,使用以下代码效果很好。
class Staff extends Model implements Auditable
{
use \OwenIt\Auditing\Auditable;
use SoftDeletes;
}
class Customer extends Model implements Auditable
{
use \OwenIt\Auditing\Auditable;
use SoftDeletes;
}
鉴于这些 classes 上有大量字段(> 20),我打算将这些 classes 转换为多态关系,其中所有公共字段都位于基础中class 和任何 class 独特的属性将进入各自的 classes。
例如-基数class:
class User extends Model implements Auditable
{
use \OwenIt\Auditing\Auditable;
use SoftDeletes;
}
目前我使用类似这样的东西来检索审计:
$staff = App\Model\Staff::find($id);
$allAudits= $staff->audits;
我的问题是有没有一种干净的方法来检索整个基础和变形的所有审计class?
提前致谢。
My question is then is there a clean way to retrieve all audits across the base and morphed class?
您可以将以下方法添加到您的基础 class 以获取所有审核:
public function getAllAudits(): Collection
{
return Audit::where(function ($query) {
$query->where('auditable_type', get_class($this))
->where('auditable_id', $this->id);
})
->orWhere(function ($query) {
$morph = $this->userable; // or whatever morph relation name you have set
$query->where('auditable_type', get_class($morph))
->where('auditable_id', $morph->id);
})
->get();
}