Der er ingen grund til at fortælle det til ikke kig efter bordet, faktisk er det det modsatte af, hvad du vil gøre, givet at du til sidst vil have adgang til det.
Tabelklassen skal grundlæggende være konfigureret som normalt, og du bør oprette den midlertidige databasetabel, før applikationen får den til at blive tilgået. Du kan enten skrive den rå tabel oprettelse SQL manuelt eller generere den fra en \Cake\Database\Schema\TableSchema
instans, som understøtter midlertidige tabeller.
Du kan enten eksplicit oprette skemaobjektet:
$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);
eller lad tabelobjektet generere det ved at bruge dit feltdefinitionsarray:
$TableObject->setSchema($TableObject->fields);
$schema = $TableObject->getSchema()->setTemporary(true);
Du kan derefter generere tabeloprettelse SQL fra skemaobjektet og køre det mod databasen:
$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
ville være en række SQL-kommandoer, der kræves for at oprette tabellen, noget i stil med:
[
'CREATE TEMPORARY TABLE `temp_items` (
`id` INTEGER AUTO_INCREMENT,
`con` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
)'
]
Bemærk, at hvis du ikke tildeler skemaet til tabelobjektet, kan du løbe ind i cacheproblemer, da det cachelagrede skema ikke ville matche længere, når du ændrer tabeldefinitionen og ikke rydder cachen.
Se også
- Kogebog> Databaseadgang og ORM> Skemasystem
- Kogebog> Databaseadgang og ORM> Grundlæggende om databaser