0

我目前正在使用 Laravel Auditing (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;

}

看到这些类上有大量字段(> 20),我打算将这些类转换为多态关系,其中所有公共字段都驻留在基类中,并且任何类的唯一属性都将放在它们各自的类中。

例如 - 基类:

class User extends Model implements Auditable
{
   use \OwenIt\Auditing\Auditable;
   use SoftDeletes;

} 

目前我使用这样的东西来检索审计:

$staff = App\Model\Staff::find($id);
$allAudits= $staff->audits;

我的问题是,是否有一种干净的方法来检索跨基类和变形类的所有审计?

提前致谢。

4

1 回答 1

0

我的问题是,是否有一种干净的方法来检索跨基类和变形类的所有审计?

您可以将以下方法添加到您的基类中以获取所有审计:

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();
}
于 2018-07-01T17:45:55.293 回答