THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour,

Je suis en train de créer une module custom et j'ai un soucis pour la génération des différentes tables que j'ai mise en place dans le fichier thelia.sql
Les différentes tables que j'ai voulu créés n'apparaissent pas dans ma base de données

Merci

thelia.sql

-- ---------------------------------------------------------------------
-- paiement_mode
-- ---------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `paiement_mode`
(
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `customer_id` INTEGER,
    `reg_mode` VARCHAR(255),
    `alias` VARCHAR(20),
    `date_val` VARCHAR(255),
    `iban` VARCHAR(255),
    `bic` VARCHAR(255),
    `status` VARCHAR(2),
    `created_at` DATETIME,
    `updated_at` DATETIME,
    PRIMARY KEY (`id`)
    CONSTRAINT `fk_CustomerPaiement` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- subscription
-- ---------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `subscription`
(
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `customer_id` INTEGER,
    `order_id` INTEGER,
    `paiement_mode_id` INTEGER,
    `num_evo` INTEGER,
    `reg_mode` VARCHAR(10),
    `period_prv` VARCHAR(2),
    `amount` DECIMAL(2),
    `prv_day` VARCHAR(2),
    `rum` VARCHAR(25),
    `statut` VARCHAR(2),
    `date_next_prv` DATETIME,
    `date_start` DATETIME,
    `date_creation` DATETIME,
    `created_at` DATETIME,
    `updated_at` DATETIME,
    PRIMARY KEY (`id`),
    CONSTRAINT `fk_CustomerSubscription` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`id`) ON DELETE CASCADE
    CONSTRAINT `fk_OrderSubscription` FOREIGN KEY (`order_id`) REFERENCES `order` (`id`) ON DELETE CASCADE
    CONSTRAINT `fk_PaiementSubscription` FOREIGN KEY (`paiement_mode_id`) REFERENCES `paiement_mode` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB;


-- ---------------------------------------------------------------------
-- subscription_financial
-- ---------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `subscription_financial`
(
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `subscription_id` INTEGER,
    `bank_transfert_id` INTEGER,
    `amount` DECIMAL(2),
    `prv_date` DATETIME,
    `status` VARCHAR(2),
    `created_at` DATETIME,
    `updated_at` DATETIME,
    PRIMARY KEY (`id`)
    CONSTRAINT fk_SubcriptionSubcriptionF FOREIGN KEY (`subscription_id`) REFERENCES `subscription` (`id`) ON DELETE CASCADE
    CONSTRAINT fk_BankTransfertSubcriptionF FOREIGN KEY (`bank_transfert_id`) REFERENCES `bank_transfer` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- subscription_suspension
-- ---------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `subscription_suspension`
(
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `subscription_id` INTEGER,
    `date_crea` DATETIME,
    `date_first` DATETIME,
    `date_last` DATETIME,
    `status` VARCHAR(2),
    `created_at` DATETIME,
    `updated_at` DATETIME,
    PRIMARY KEY (`id`)
    CONSTRAINT fk_SubcriptionSubcriptionS FOREIGN KEY (`subscription_id`) REFERENCES `subscription` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- bank_transfer
-- ---------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `bank_transfer`
(
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `code_lot` VARCHAR(10),
    `reg_mode` VARCHAR(10),
    `rpv_date` DATETIME,
    `quantity_calculated` INTEGER,
    `amount_calculated` DECIMAL(2),
    `amount_paid` DECIMAL(2),
    `amount_unpaid` DECIMAL(2),
    `status` VARCHAR(2),
    `created_at` DATETIME,
    `updated_at` DATETIME,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB;

# This restores the fkey checks, after having unset them earlier
SET FOREIGN_KEY_CHECKS = 1;

fichier Custom.php

namespace Custom;

use Propel\Runtime\Connection\ConnectionInterface;
use Thelia\Install\Database;
use Thelia\Module\BaseModule;


class Custom extends BaseModule
{
    /** @var string */
    const DOMAIN_NAME = 'custom';

    /*
     * You may now override BaseModuleInterface methods, such as:
     * install, destroy, preActivation, postActivation, preDeactivation, postDeactivation
     *
     * Have fun !
     */

    public function preActivation(ConnectionInterface $con = null)
    {
        if (! $this->getConfigValue('is_initialized', false)) {
            $database = new Database($con);

            $database->insertSql(null, array(__DIR__ . '/Config/thelia.sql'));

            $this->setConfigValue('is_initialized', true);
        }

        return true;
    }

    public function destroy(ConnectionInterface $con = null, $deleteModuleData = false)
    {
        $database = new Database($con);

        $database->insertSql(null, array(__DIR__ . '/Config/sql/destroy.sql'));
    }
}

Offline


Je pense que j'ai un soucis au niveau de la syntaxe de mes clés étrangères.

Offline


J'ai réussi à résoudre mon problème de clé étrangère en faisant bien mon schema.xml et utilise la ligne de commande pour générer le sql.
Sauf au moment de l'activation du module, je ne vois toujours pas mes tables dans la base de données.
Et comment on fait pour générer les getters et setters de mes différents model smile

Offline


Nouveau fichier SQL

# This is a fix for InnoDB in MySQL >= 4.1.x
# It "suspends judgement" for fkey relationships until are tables are set.
SET FOREIGN_KEY_CHECKS = 0;

-- ---------------------------------------------------------------------
-- paiement_mode
-- ---------------------------------------------------------------------

DROP TABLE IF EXISTS `paiement_mode`;

CREATE TABLE `paiement_mode`
(
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `reg_mode` VARCHAR(10),
    `alias` VARCHAR(20),
    `date_val` VARCHAR(5),
    `bic` VARCHAR(20),
    `iban` VARCHAR(20),
    `status` VARCHAR(2),
    `customer_id` INTEGER,
    PRIMARY KEY (`id`),
    INDEX `FI_custosmer_id` (`customer_id`),
    CONSTRAINT `fk_custosmer_id`
        FOREIGN KEY (`customer_id`)
        REFERENCES `customer` (`id`)
        ON UPDATE RESTRICT
        ON DELETE CASCADE
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- subscription
-- ---------------------------------------------------------------------

DROP TABLE IF EXISTS `subscription`;

CREATE TABLE `subscription`
(
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `num_evo` INTEGER,
    `reg_mode` VARCHAR(10),
    `period_prv` VARCHAR(2),
    `amount` DECIMAL(2),
    `period_day` VARCHAR(2),
    `rum` VARCHAR(25),
    `status` VARCHAR(2),
    `date_next_prv` DATETIME,
    `date_start` DATETIME,
    `date_creation` DATETIME,
    `customer_id` INTEGER,
    `order_id` INTEGER,
    `paiement_mode_id` INTEGER,
    PRIMARY KEY (`id`),
    INDEX `FI_custosmer_id` (`customer_id`),
    INDEX `FI_order_id` (`order_id`),
    INDEX `FI_paiement_mode_id` (`paiement_mode_id`),
    CONSTRAINT `fk_custosmer_id`
        FOREIGN KEY (`customer_id`)
        REFERENCES `customer` (`id`)
        ON UPDATE RESTRICT
        ON DELETE CASCADE,
    CONSTRAINT `fk_order_id`
        FOREIGN KEY (`order_id`)
        REFERENCES `order` (`id`)
        ON UPDATE RESTRICT
        ON DELETE CASCADE,
    CONSTRAINT `fk_paiement_mode_id`
        FOREIGN KEY (`paiement_mode_id`)
        REFERENCES `paiement_mode` (`id`)
        ON UPDATE RESTRICT
        ON DELETE CASCADE
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- subscription_financial
-- ---------------------------------------------------------------------

DROP TABLE IF EXISTS `subscription_financial`;

CREATE TABLE `subscription_financial`
(
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `prv_date` DATETIME,
    `amount` DECIMAL(2),
    `status` VARCHAR(2),
    `subscription_id` INTEGER,
    `bank_transfer_id` INTEGER,
    PRIMARY KEY (`id`),
    INDEX `FI_subscription_id` (`subscription_id`),
    INDEX `FI_bank_transfer_id` (`bank_transfer_id`),
    CONSTRAINT `fk_subscription_id`
        FOREIGN KEY (`subscription_id`)
        REFERENCES `subscription` (`id`)
        ON UPDATE RESTRICT
        ON DELETE CASCADE,
    CONSTRAINT `fk_bank_transfer_id`
        FOREIGN KEY (`bank_transfer_id`)
        REFERENCES `bank_transfer` (`id`)
        ON UPDATE RESTRICT
        ON DELETE CASCADE
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- bank_transfer
-- ---------------------------------------------------------------------

DROP TABLE IF EXISTS `bank_transfer`;

CREATE TABLE `bank_transfer`
(
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `code_lot` VARCHAR(10),
    `reg_mode` VARCHAR(10),
    `prv_date` DATETIME,
    `quantity_calculated` INTEGER,
    `amount_calculated` DECIMAL(2),
    `amount_paid` DECIMAL(2),
    `amount_unpaid` DECIMAL(2),
    `status` VARCHAR(2),
    PRIMARY KEY (`id`)
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- subscription_suspension
-- ---------------------------------------------------------------------

DROP TABLE IF EXISTS `subscription_suspension`;

CREATE TABLE `subscription_suspension`
(
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `date_crea` DATETIME,
    `date_first` DATETIME,
    `date_last` DATETIME,
    `subscription_id` INTEGER,
    PRIMARY KEY (`id`),
    INDEX `FI_subscription_id` (`subscription_id`),
    CONSTRAINT `fk_subscription_id`
        FOREIGN KEY (`subscription_id`)
        REFERENCES `subscription` (`id`)
        ON UPDATE RESTRICT
        ON DELETE CASCADE
) ENGINE=InnoDB;

# This restores the fkey checks, after having unset them earlier
SET FOREIGN_KEY_CHECKS = 1;

Offline


Si tu n'as pas de table, c'est sans doute parce que que le fichier SQL n'est pas exécuté. Il y a quoi dans la variable 'is_initialized' ?

Et comment on fait pour générer les getters et setters de mes différents model

C'est à dire ? Que veux-tu faire exactement ?


OpenStudio Toulouse

Offline


J'ai réussi à réparer mes erreurs smile
Merci quand même