Laravel — получение последнего времени обновления таблицы

#mysql #laravel #laravel-5 #eloquent

#mysql #laravel #laravel-5 #красноречивый

Вопрос:

Я заинтересован в получении последнего времени, когда таблица обновлялась (что не обязательно является самой новой записью — записи также могут быть удалены).

В SQL решение простое:

 SELECT UPDATE_TIME FROM information_schema.tables
WHERE  TABLE_SCHEMA = 'myDb' AND TABLE_NAME = 'myTable';
  

Однако единственный способ, которым мне удается это сделать, — создать новое соединение.
Предположим, что мое соединение вызвано mysqlConn , мое новое соединение будет выглядеть так:

 'mysqlConnScheme' => [
    'driver'      => *** same as mysqlConn ***,
    'host'        => *          - " -        *, 
    'port'        => *          - " -        *, 
    'username'    => *          - " -        *, 
    'password'    => *          - " -        *, 
    'database'    => 'information_schema',
],
  

Затем я могу получить его с помощью:

 $updateTime = DB::connection('mysqlConnScheme')
    ->setDatabaseName('information_schema')
    ->table('tables')
    ->select('UPDATE_TIME')
    ->where('TABLE_SCHEMA', '=', 'myDb')
    ->where('TABLE_NAME', '=', 'myTable')
    ->first();
  

Интересно, есть ли какой-либо способ сделать это без создания другого соединения.

Комментарии:

1. Я использовал поле datetime, которое я всегда устанавливаю в NOW() на INSERT s и UPDATE s, но это было бы интересно, если бы существовал более собственный метод.

2. Если с каждой из ваших таблиц связана модель, которую вы использовали $table->timestamps() при миграции, то в каждой таблице должен быть updated_at столбец, который автоматически обновляется при изменении строки. Если вы прокрутите немного вниз здесь: laravel.com/docs/7.x/eloquent#eloquent-model-conventions вы можете увидеть раздел временных меток и как это работает

3. Чтобы добавить в @TimLewis: чтобы включить удаленные записи, вам также придется использовать мягкое удаление

4. Большое спасибо. Проблема, как я уже упоминал, в удаленных записях. Я не знал о программном удалении, это очень интересно, но в моем случае необходимо жесткое удаление.