Não há necessidade de dizer para não procure a tabela, na verdade isso é o oposto do que você quer fazer, já que eventualmente você quer acessá-la.
A classe de tabela deve basicamente ser configurada como de costume, e você deve criar a tabela de banco de dados temporária antes que o aplicativo faça com que ela seja acessada. Você pode escrever o SQL de criação de tabela bruta manualmente ou gerá-lo de um
\Cake\Database\Schema\TableSchema
instância, que suporta tabelas temporárias. Você pode criar explicitamente o objeto de esquema:
$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 deixe o objeto de tabela gerá-lo, usando sua matriz de definição de campos:
$TableObject->setSchema($TableObject->fields);
$schema = $TableObject->getSchema()->setTemporary(true);
Você pode então gerar o SQL de criação de tabela a partir do objeto de esquema e executá-lo no banco de dados:
$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
seria uma matriz de comandos SQL necessários para criar a tabela, algo nos moldes de:[
'CREATE TEMPORARY TABLE `temp_items` (
`id` INTEGER AUTO_INCREMENT,
`con` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
)'
]
Observe que, se você não atribuir o esquema ao objeto de tabela, poderá ter problemas de cache, pois o esquema em cache não corresponderá mais quando você alterar a definição da tabela e não limpar o cache.
Veja também
- Livro de receitas> Acesso a banco de dados e ORM> Sistema de esquema
- Livro de receitas> Acesso a banco de dados e ORM> Noções básicas de banco de dados