run_migration.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. /**
  3. * Database Migration Runner
  4. * Adds missing 'slug' column to publications table
  5. */
  6. require_once 'includes/config.php';
  7. require_once 'includes/database.php';
  8. try {
  9. $db = Database::getInstance();
  10. echo "Starting migration: Add slug column to publications table...\n";
  11. // Check if slug column already exists
  12. $checkSql = "SHOW COLUMNS FROM publications LIKE 'slug'";
  13. $result = $db->fetchAll($checkSql);
  14. if (empty($result)) {
  15. echo "Adding slug column...\n";
  16. // Add slug column
  17. $db->query("ALTER TABLE publications ADD COLUMN slug VARCHAR(255) AFTER title");
  18. // Add index for slug
  19. $db->query("ALTER TABLE publications ADD INDEX idx_publications_slug (slug)");
  20. echo "Slug column added successfully.\n";
  21. } else {
  22. echo "Slug column already exists.\n";
  23. }
  24. // Check if published_at column exists
  25. $checkPublishedAt = "SHOW COLUMNS FROM publications LIKE 'published_at'";
  26. $resultPublishedAt = $db->fetchAll($checkPublishedAt);
  27. if (empty($resultPublishedAt)) {
  28. echo "Adding published_at column...\n";
  29. $db->query("ALTER TABLE publications ADD COLUMN published_at TIMESTAMP NULL DEFAULT NULL AFTER created_at");
  30. echo "Published_at column added successfully.\n";
  31. } else {
  32. echo "Published_at column already exists.\n";
  33. }
  34. // Update existing publications to generate slugs
  35. echo "Generating slugs for existing publications...\n";
  36. $updateSql = "UPDATE publications SET slug = LOWER(REPLACE(REPLACE(REPLACE(title, '[^a-z0-9 ]', ''), ' ', '-'), '-', '')) WHERE slug IS NULL OR slug = ''";
  37. $db->query($updateSql);
  38. // Update published_at for existing published publications
  39. echo "Updating published_at for existing publications...\n";
  40. $updatePublishedAtSql = "UPDATE publications SET published_at = created_at WHERE status = 'published' AND published_at IS NULL";
  41. $db->query($updatePublishedAtSql);
  42. echo "Migration completed successfully!\n";
  43. } catch (Exception $e) {
  44. echo "Migration failed: " . $e->getMessage() . "\n";
  45. echo "Please check your database configuration and permissions.\n";
  46. }
  47. ?>