DIŞ ANAHTAR dbDelta desteği


9

PHP 5.3.13 / MySQL 5.5.21 üzerinde aşağıdaki kod çalışmaz:

if($check_custom_fields_form!=1){
    $sql = "CREATE TABLE IF NOT EXISTS ". $table_custom_fields_form ." (
                `form_name` longtext NOT NULL,
                `field_id` bigint(20) NOT NULL,
                FOREIGN KEY (`field_id`) REFERENCES $table_custom_fields (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
    ) CHARACTER SET utf8 COLLATE utf8_general_ci";
    dbDelta($sql);
}
if($check_subscribe_cat!=1){
    $sql = "CREATE TABLE IF NOT EXISTS ". $table_subscribe_cat ." (
                `subscribe_id` bigint(20) NOT NULL,
                `cat_id` bigint(20) NOT NULL,
                FOREIGN KEY (`subscribe_id`) REFERENCES ".$wpdb->prefix."tgt_subscription (`ID`) ON DELETE CASCADE ON UPDATE CASCADE,
                FOREIGN KEY (`cat_id`) REFERENCES ".$wpdb->prefix."terms (`term_id`) ON DELETE CASCADE ON UPDATE CASCADE
    ) CHARACTER SET utf8 COLLATE utf8_general_ci";
    dbDelta($sql);
 }

Kod sağlayıcı MySQL 5.1.37 için bir downgrade önerdi (hayır, teşekkürler) veya aşağıdaki güncelleme:

if($check_custom_fields_form!=1){
        $sql = "CREATE TABLE IF NOT EXISTS ". $table_custom_fields_form ." (
                    `form_name` longtext NOT NULL,
                    `field_id` bigint(20) NOT NULL,
                    KEY(field_id)
        ) CHARACTER SET utf8 COLLATE utf8_general_ci";
        dbDelta($sql);
    }
if($check_subscribe_cat!=1){
      $sql = "CREATE TABLE IF NOT EXISTS ". $table_subscribe_cat ." (
                  `subscribe_id` bigint(20) NOT NULL,
                  `cat_id` bigint(20) NOT NULL,
                  KEY(subscribe_id),
                  KEY(cat_id)
      ) CHARACTER SET utf8 COLLATE utf8_general_ci";
      dbDelta($sql);
   }

Bu, soruna geçici bir çözüm bulmak için oldukça kirli bir yol gibi görünüyor (basamaklı silme / güncelleştirme yok). Bu nedenle:

  1. DbDelta YABANCI ANAHTARI destekleyene kadar bununla yaşamak zorunda mıyım ?
  2. DbDelta'nın 3 yıllık bir MySQL sürümünde sadece yabancı anahtarla çalıştığı doğru mu?

1
Basamaklı silme / güncelleme güzel olsa da, tamamen gerekli mi? Bu parçayı kodunuza ekleyebilir veya tablolarınızı yeniden düzenleyebilir misiniz?
T0xicCode

Gerekli olup olmadıklarından emin değilim, bu 3. parti kodunu yeterince öğrenmedim.
Gaia

1
TheDeadMedic doğru. Ancak, ben sadece bu Bağlantı dbDelta ve YABANCI ANAHTAR buldum . Problemin bir yolunu açıklar. Benim için çalıştı. İyi şanslar!

Yanıtlar:


3

Gerçekten dbDelta YABANCI ANAHTAR destekleyene kadar bununla yaşamak zorunda mıyım?

Açıkçası, evet. Ama bu açık kaynağın güzelliği - herkes bir yama yayınlayabilir!

Bununla birlikte , şema tasarımının diğer yönlerini kapsayacak şekilde genişletmek neredeyse kesinlikle istenmeyen karmaşıklığa neden olacak ve başarısızlık olasılığını artıracaktır - çekirdek ekibin önceden önceden dikkate alacağı bir şey.

@ Xav0989'un tavsiyesini alırdım - dbDeltaniyetinde kullanın (temel tablo uygulaması, sütun eklemeleri ve ayarlamalar) ve ek özellikleri ele alalım $wpdb.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.