বিদেশী কী জন্য dbDelta সমর্থন


9

পিএইচপি 5.3.13 / মাইএসকিউএল 5.5.21 এ নিম্নলিখিত কোডটি কাজ করে না:

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);
 }

কোড প্রদানকারী মাইএসকিউএল 5.1.37 করার জন্য একটি ডাউনগ্রেড প্রস্তাব (কোন, ধন্যবাদ) অথবা নিম্নলিখিত আপডেট:

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);
   }

যা সমস্যাটিকে ঘিরে কাজ করার মতো একটি নোংরা উপায় বলে মনে হচ্ছে (কোনও ক্যাসকেডিং মোছা / আপডেট নেই)। অতএব:

  1. DbDelta বিদেশী কী সমর্থন না করা পর্যন্ত আমি কি সত্যিই এর সাথে বেঁচে থাকতে পারি ?
  2. এটা কি সত্য যে dbDelta কেবল 3 বছরের পুরানো মাইএসকিউএল সংস্করণে বিদেশী কী নিয়ে কাজ করে?

1
ক্যাসকেডিং মুছে ফেলা / আপডেটগুলি দুর্দান্ত, সেগুলি কি সম্পূর্ণ প্রয়োজনীয়? আপনি কি সেই অংশটি আপনার কোডে অন্তর্ভুক্ত করতে পারেন, বা আপনার টেবিলগুলি রিফ্যাক্টর করতে পারেন?
T0xicCode

সেগুলি প্রয়োজনীয় কিনা তা সম্পর্কে আমি নিশ্চিত নই, আমি জানার জন্য এই তৃতীয় পক্ষের কোডটি অধ্যয়ন করি নি।
গাইয়া

1
TheDeadMedic সঠিক। তবে, আমি এই লিঙ্কটি dbDelta এবং বিদেশী কী খুঁজে পেয়েছি । এটি সমস্যার চারপাশের একটি উপায় ব্যাখ্যা করে। এটা আমার জন্য কাজ করেছে। শুভকামনা!

উত্তর:


3

DbDelta বিদেশী কী সমর্থন না করা পর্যন্ত আমি কি সত্যিই এর সাথে বেঁচে থাকতে পারি?

বেশ স্পষ্টভাবে, হ্যাঁ। তবে এটি ওপেন সোর্সের সৌন্দর্য - যে কোনও প্যাচ পোস্ট করতে স্বাগত!

তবে স্কিমা ডিজাইনের অন্যান্য দিকগুলি কভার করার জন্য এটি প্রসারিত করা অবশ্যই অযাচিত জটিলতা সৃষ্টি করবে এবং ব্যর্থতার সম্ভাবনা আরও বাড়িয়ে দেবে - এমন কিছু বিষয় যা মূল দল আগে থেকেই দৃ before়তার সাথে বিবেচনা করবে।

আমি @ xav0989 এর পরামর্শ নেব - dbDeltaএর উদ্দেশ্যটির জন্য ব্যবহার করব (বেসিক টেবিল প্রয়োগ, কলাম সংযোজন এবং সমন্বয়), এবং এর সাথে অতিরিক্ত বৈশিষ্ট্যগুলি পরিচালনা করব $wpdb

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.