বিদেশী কী জন্য 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.