Laravel Eloquent - единственный в своем роде - PullRequest
0 голосов
/ 01 апреля 2019

Я использую 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, но это невозможно (напрямую) на красноречивых моделях, верно?

1 Ответ

0 голосов
/ 01 апреля 2019

Вы можете попробовать это:

public function latest($column = 'created_at')
{
    return $this->orderBy($column, 'desc');
} 
Audit::->latest()->take(2)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...