Intereting Posts
Как найти все сообщения без категории и присвоить «Без рубрики»? Сохранение пользовательских параметров в WordPress admin Удалить категорию slug из ссылки Миграция пользователей из .com в .org? Сценарий не загружается через класс плагина Удаление плагинов: зачем запускать dbDelta после $ wpdb-> query ($ drop_sql) Доступ к данным из базы данных / таблицы без WP в содержимом страницы Как передать аргументы add_action () Удаленная страница архива по типу публикации сообщений показывает страницу блога ABSPATH не работает! Любая идея почему? Как получить ссылку профиля пользователя Buddypress и определенное поле профиля пользователя для текущего автора сообщения? Контактная форма 7 фильтр, аналогичный preprocess_comment Показать пользовательские позиции таксономии WordPress, основанные на выбранном элементе из другой пользовательской таксономии Как вызвать функцию плагина из формы переднего плана Ошибка при обновлении с 2.9.2 до 3.0.1

Поддержка dbDelta для FOREIGN KEY

На PHP 5.3.13 / MySQL 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); } 

Поставщик кода предложил перейти на MySQL 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 не поддержит FOREIGN KEY ?
  2. Верно ли, что dbDelta работает только с внешним ключом в 3-летней версии MySQL?

Solutions Collecting From Web of "Поддержка dbDelta для FOREIGN KEY"

Нужно ли мне с этим жить, пока dbDelta не поддержит FOREIGN KEY?

Совершенно откровенно, да. Но это красота с открытым исходным кодом – любой может опубликовать патч!

Однако расширение его для охвата других аспектов дизайна схемы почти наверняка вызовет нежелательную сложность и усилит вероятность сбоя – то, что основная команда решительно рассмотрит заранее.

Я бы взял совет @ xav0989 – используйте dbDelta для его намерения (базовая реализация таблицы, дополнения и корректировки столбцов) и обработайте дополнительные функции с помощью $wpdb .