web-dev-qa-db-fra.com

Puis-je créer deux tables à la fois tout en installant un plugin personnalisé?

Bonjour, je veux savoir si je peux créer deux tables lors de l'installation de mon plugin personnalisé. C’est ainsi que je crée la tables dans la base de données

   function wnm_install(){
global $wpdb;
global $wnm_db_version;

$sms_table = $wpdb->prefix . "smsfactory";
if($wpdb->get_var("show tables like '". $sms_table . "'") != $sms_table){ 
$sql_sms_table = "CREATE TABLE ". $sms_table . "     (
SfID int(11) NOT NULL AUTO_INCREMENT,
sf_name varchar(128) NOT NULL,
start_duration date NOT NULL,
end_duration date NOT NULL,
activity varchar(500) NOT NULL,
survey_settings varchar(50) NOT NULL,
`limit` varchar(50) NOT NULL,
goal varchar(100) DEFAULT NULL,
PRIMARY KEY  (SfID)
) ";
}


$sms_message_table = $wpdb->prefix . "smsfactorymessagetemplate";
if($wpdb->get_var("show tables like '". $sms_message_table . "'") != $sms_message_table){ 
$sql = "CREATE TABLE ". $sms_message_table . "   (
sfID int(11) NOT NULL AUTO_INCREMENT,
sftemplate_name varchar(256) NOT NULL,
sftemplate_type varchar(128) NOT NULL,
PRIMARY KEY  (sfID)
) ";
}
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
add_option("wnm_db_version", $wnm_db_version);
}

Maintenant, le problème avec ce code est qu’il crée la deuxième table et saute la première, merci de me dire toute solution à ce problème

2
Jayant Rawat

Il me semble que vous exécutez une seule requête: dbDelta($sql);.

Avez-vous essayé d'ajouter dbDelta($sql_sms_table);?

1
Steven

Dans votre code d'origine, vous appeliez uniquement dbDelta($sql) et non pas dbDelta($sql_sms_table) également.

Une meilleure façon ...

dbDelta() peut prendre un tableau de requêtes, nous devons donc définir un tableau vide sur la variable $sql pour stocker les requêtes si leurs conditions évaluent true.

function wnm_install() {

    global $wpdb, $wnm_db_version;

    $sql = array();

    //sms table
    $sms_table = $wpdb->prefix . "smsfactory";

    if( $wpdb->get_var("show tables like '". $sms_table . "'") !== $sms_table ) { 

        $sql[] = "CREATE TABLE ". $sms_table . "     (
        SfID int(11) NOT NULL AUTO_INCREMENT,
        sf_name varchar(128) NOT NULL,
        start_duration date NOT NULL,
        end_duration date NOT NULL,
        activity varchar(500) NOT NULL,
        survey_settings varchar(50) NOT NULL,
        `limit` varchar(50) NOT NULL,
        goal varchar(100) DEFAULT NULL,
        PRIMARY KEY  (SfID)
        ) ";

    }

    //sms messages table
    $sms_message_table = $wpdb->prefix . "smsfactorymessagetemplate";

    if( $wpdb->get_var("show tables like '". $sms_message_table . "'") !== $sms_message_table ) { 

        $sql[] = "CREATE TABLE ". $sms_message_table . "   (
        sfID int(11) NOT NULL AUTO_INCREMENT,
        sftemplate_name varchar(256) NOT NULL,
        sftemplate_type varchar(128) NOT NULL,
        PRIMARY KEY  (sfID)
        ) ";

    }


    if ( !empty($sql) ) {

        require_once(ABSPATH . 'wp-admin/includes/upgrade.php');

        dbDelta($sql);
        add_option("wnm_db_version", $wnm_db_version);

    }

}
4
userabuser