#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. Большое спасибо. Проблема, как я уже упоминал, в удаленных записях. Я не знал о программном удалении, это очень интересно, но в моем случае необходимо жесткое удаление.