sql >> Databáze >  >> RDS >> Mysql

CakePHP 3:Nejlepší postup pro dočasné tabulky SQL

Není třeba říkat, aby ne hledejte tabulku, ve skutečnosti je to opak toho, co chcete dělat, protože k ní nakonec chcete mít přístup.

Třída tabulky by měla být v zásadě nakonfigurována jako obvykle a dočasnou databázovou tabulku byste měli vytvořit dříve, než k ní aplikace přistoupí. SQL vytvoření nezpracované tabulky můžete buď napsat ručně, nebo jej vygenerovat z \Cake\Database\Schema\TableSchema instance, která podporuje dočasné tabulky.

Můžete buď explicitně vytvořit objekt schématu:

$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);

nebo ji nechte vygenerovat objektem tabulky pomocí pole definice polí:

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

Poté můžete vygenerovat SQL vytvoření tabulky z objektu schématu a spustit jej proti databázi:

$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 by bylo pole SQL příkazů potřebných k vytvoření tabulky, něco ve smyslu:

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

Všimněte si, že pokud nepřiřadíte schéma k objektu tabulky, můžete narazit na problémy s ukládáním do mezipaměti, protože schéma uložené v mezipaměti už nebude odpovídat, když změníte definici tabulky a nevymažete mezipaměť.

Viz také




  1. Výstup MYSQL ve stromovém formátu NEBO Přidání úrovně (rodič-dítě)

  2. Mysql:Vyberte všechna data mezi dvěma daty

  3. Jak získat NÁHODNÉ záznamy z každé kategorie v MySQL?

  4. Načítání CSV souborů do MySQL Workbench