多态Laravel审核程序包-检索多态审核

时间:2018-06-29 00:09:07

标签: laravel laravel-5.5 polymorphic-associations laravel-auditing

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

然后我的问题是,有没有一种干净的方法来检索基类和变形类的所有审核?

谢谢。

1 个答案:

答案 0 :(得分: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();
}