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);
}
これは問題を回避するためのかなり汚い方法のように見えます(連鎖的な削除/更新はありません)。したがって:
- dbDeltaがFOREIGN KEYをサポートするまで、私は実際にこれに耐えなければなりませんか?
- dbDeltaが3年前のMySQLバージョンの外部キーでのみ機能するのは本当ですか?
1
カスケード削除/更新は便利ですが、完全に必要ですか?その部分をコードに含めたり、テーブルをリファクタリングしたりできますか?
—
T0xicCode
それらが必要かどうかはわかりませんが、このサードパーティのコードを十分に理解していないためです。
—
ガイア
TheDeadMedicは正しいです。しかし、私はこのLink dbDeltaとFOREIGN KEYを見つけました。問題を回避する方法を説明します。それは私のために働いた。幸運を!