Intereting Posts
Как мы можем получить идентификатор пользователя по имени display_name Изменить URL-адрес массовой загрузки WordPress? Пользовательское правило перезаписи для запроса var прослушивания на странице pagenavi показывает много страниц, рассчитанных из всех сообщений на сайте с помощью query_posts Все возможные способы получения данных (сообщений) из WordPress Извлеченный CSV как массив для пользовательского цикла запросов Как добавить страницу сборки пользовательского профиля? Как рассчитать среднее значение мета-значения (числовое) конкретного автора Включить таблицу стилей печати Пользовательские типы сообщений с настраиваемыми каталогами Медленный запрос при выборе с большим мета-запросом или post__in Заказ сообщений по дате пользовательского поля Требования к сайту WordPress WooCommerce Где находится все в одном SEO-файле sitemap.xml? Отображать ссылку только на социальные сети автора, когда она существует

Поддержка 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 .