Mysql
 sql >> Base de données >  >> RDS >> Mysql

CakePHP 3 :Meilleures pratiques pour les tables SQL temporaires

Il n'est pas nécessaire de le dire non chercher la table, en fait c'est l'inverse de ce que tu veux faire, étant donné que tu veux éventuellement y accéder.

La classe de table doit essentiellement être configurée comme d'habitude et vous devez créer la table de base de données temporaire avant que l'application n'y accède. Vous pouvez soit écrire le SQL brut de création de table manuellement, soit le générer à partir d'un \Cake\Database\Schema\TableSchema instance, qui prend en charge les tables temporaires.

Vous pouvez soit créer explicitement l'objet schéma :

$schema = new \Cake\Database\Schema\TableSchema('temp_items');
$schema
    ->addColumn('id', ['type' => 'integer'])
    ->addColumn('con', ['type' => 'string', 'length' => 255, 'null' => false])
    ->addConstraint('primary', ['type' => 'primary', 'columns' => ['id']])
    ->setTemporary(true);

$TableObject->setSchema($schema);

ou laissez l'objet table le générer, en utilisant votre tableau de définition de champs :

$TableObject->setSchema($TableObject->fields);
$schema = $TableObject->getSchema()->setTemporary(true);

Vous pouvez ensuite générer le SQL de création de table à partir de l'objet de schéma et l'exécuter sur la base de données :

$connection = $TableObject->getConnection();
$queries = $schema->createSql($connection);

$connection->transactional(
    function (\Cake\Database\Connection $connection) use ($queries) {
        foreach ($queries as $query) {
            $stmt = $connection->execute($query);
            $stmt->closeCursor();
        }
    }
);

$queries serait un tableau de commandes SQL nécessaires pour créer la table, quelque chose comme :

[
    'CREATE TEMPORARY TABLE `temp_items` (
        `id` INTEGER AUTO_INCREMENT,
        `con` VARCHAR(255) NOT NULL,
        PRIMARY KEY (`id`)
    )'
]

Notez que si vous n'affectez pas le schéma à l'objet de table, vous pourriez rencontrer des problèmes de mise en cache, car le schéma mis en cache ne correspondrait plus lorsque vous modifiez la définition de la table et ne videz pas le cache.

Voir aussi