Я использую https://github.com/owen-it/laravel-auditing, который регистрирует каждое изменение для каждой модели (которая использует особую черту) в таблице с именем audits
:
id
auditable_type
= название класса модели, которое было изменено
auditable_id
= идентификатор модели, которая была изменена
created_at
= дата изменения
- ...
Со следующими примерами данных:
| id | auditable_type | auditable_id | created_at |
|----|----------------|--------------|------------|
| 1 | App\City | 1 | 2019-01-01 |
| 2 | App\City | 2 | 2019-01-02 |
| 3 | App\City | 2 | 2019-01-02 |
Теперь я хочу запросить два последних изменения (order by created_at DESC
) всех моделей, что довольно просто:
Audit::query()
->limit(2)
->orderBy("created_at", "DESC")
->get()
Что приведет к этому:
| id | auditable_type | auditable_id | created_at |
|----|----------------|--------------|------------|
| 2 | App\City | 2 | 2019-01-02 |
| 3 | App\City | 2 | 2019-01-02 |
Но как получить последние измененные строки модели, а не последние изменения:
| id | auditable_type | auditable_id | created_at |
|----|----------------|--------------|------------|
| 1 | App\City | 1 | 2019-01-01 |
| 3 | App\City | 2 | 2019-01-02 |
Обычно я бы использовал GroupBy, но это невозможно (напрямую) на красноречивых моделях, верно?