|
|
|
|
@ -0,0 +1,44 @@
|
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
use Illuminate\Database\Migrations\Migration;
|
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
|
use Illuminate\Support\Facades\Schema;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 修复 timestamp→date 迁移时 end_at 普遍多 1 天的问题。
|
|
|
|
|
*
|
|
|
|
|
* 原因:旧数据 end_at 为东八区当日 23:59:59(UTC 约 15:59:59)。
|
|
|
|
|
* MySQL 在 session 时区 +08:00 下读取 TIMESTAMP 已是本地 23:59:59,
|
|
|
|
|
* 再 CONVERT_TZ(..., '+00:00', '+08:00') 会被当作 UTC 再加 8 小时,日历日 +1。
|
|
|
|
|
* start_at 为 00:00:00 不受影响;仅 end_at 需回退 1 天。
|
|
|
|
|
*/
|
|
|
|
|
return new class extends Migration
|
|
|
|
|
{
|
|
|
|
|
public function up(): void
|
|
|
|
|
{
|
|
|
|
|
if (! Schema::hasTable('activities')) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$column = DB::selectOne("SHOW COLUMNS FROM activities WHERE Field = 'end_at'");
|
|
|
|
|
if (! $column || stripos((string) $column->Type, 'date') === false) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DB::statement('UPDATE activities SET end_at = DATE_SUB(end_at, INTERVAL 1 DAY) WHERE end_at IS NOT NULL');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function down(): void
|
|
|
|
|
{
|
|
|
|
|
if (! Schema::hasTable('activities')) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$column = DB::selectOne("SHOW COLUMNS FROM activities WHERE Field = 'end_at'");
|
|
|
|
|
if (! $column || stripos((string) $column->Type, 'date') === false) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DB::statement('UPDATE activities SET end_at = DATE_ADD(end_at, INTERVAL 1 DAY) WHERE end_at IS NOT NULL');
|
|
|
|
|
}
|
|
|
|
|
};
|