Полиморфный Laravel Auditing Package - Получение полиморфных аудитов - PullRequest
0 голосов
/ 29 июня 2018

В настоящее время я использую пакет 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 голосов
/ 01 июля 2018

Тогда у меня вопрос: есть ли чистый способ получить все проверки в базовом и преобразованном классе?

Вы можете добавить следующий метод в ваш базовый класс для получения всех проверок:

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();
}
...