Appearance
誕生日テーブル(db_birthday)UNIQUE 自動移行
wp_db_birthday に UNIQUE(month, day, chara, divi, title) を適用します。Issue #2123 および誕生日シード(URL 指定取得)の重複スキップ方針に合わせ、同一の「月・日・キャラ名・区分(声優名含む)・作品名」が重複した場合のみスキップし、月日や作品名が異なる同名キャラは別エントリとして登録できます。
自動移行
管理画面を開くと admin_init 経由で App\Infrastructure\Database\BirthdaySeedInstaller が実行されます。既存テーブルがある環境では、旧 UNIQUE(例: (chara, divi) や (month, day, chara, divi))を自動 DROP し、同一 (month, day, chara, divi, title) の重複行があれば id 最小の 1 行だけ残して削除したうえで UNIQUE(month, day, chara, divi, title) を dbDelta で追加します。
- コード:
core_src/Infrastructure/Database/BirthdaySeedInstaller.php - 登録:
AdminDatabaseInstaller::ensure_all()
手順
- 本番・ステージングにテーマをデプロイする
- WordPress 管理画面に 1 回アクセスする(
admin_initで Installer が走る) - 必要に応じて誕生日シード管理画面で動作確認する(誕生日マスタ(db_birthday)スロカレシード導入手順)
運用前提: 移行は管理画面アクセスで完結します。手動 SQL は不要です。
確認・トラブルシュート
- インデックス:
SHOW INDEX FROM wp_db_birthday;でuk_birthday_month_day_chara_divi_title(列: month, day, chara, divi, title)が 1 本だけであること - ログ: PHP エラーログの
[BirthdaySeedInstaller]を参照(重複削除件数・DROP 失敗など) - 移行が途中で止まった場合: 管理画面に再度アクセスして再試行(
birthday_seed_db_versionが目標スキーマ到達まで更新されない限り再実行される)
関連
- 誕生日シードの導入手順: 誕生日マスタ(db_birthday)スロカレシード導入手順
- 重複キー修正: Issue #2123