Nie ma potrzeby mówić mu, aby nie poszukaj tabeli, w rzeczywistości jest to przeciwieństwo tego, co chcesz zrobić, biorąc pod uwagę, że w końcu chcesz uzyskać do niej dostęp.
Klasa tabeli powinna być zasadniczo skonfigurowana jak zwykle, a tymczasową tabelę bazy danych należy utworzyć, zanim aplikacja umożliwi dostęp do niej. Możesz albo ręcznie napisać surowy kod SQL do tworzenia tabeli, albo wygenerować go z \Cake\Database\Schema\TableSchema
instancja, która obsługuje tabele tymczasowe.
Możesz albo jawnie utworzyć obiekt schematu:
$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);
lub pozwól, aby obiekt tabeli go wygenerował, korzystając z tablicy definicji pól:
$TableObject->setSchema($TableObject->fields);
$schema = $TableObject->getSchema()->setTemporary(true);
Następnie możesz wygenerować SQL tworzenia tabeli z obiektu schematu i uruchomić go w bazie danych:
$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łaby tablicą poleceń SQL wymaganych do utworzenia tabeli, coś w stylu:
[
'CREATE TEMPORARY TABLE `temp_items` (
`id` INTEGER AUTO_INCREMENT,
`con` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
)'
]
Pamiętaj, że jeśli nie przypiszesz schematu do obiektu tabeli, możesz napotkać problemy z buforowaniem, ponieważ buforowany schemat nie będzie już pasował, gdy zmienisz definicję tabeli i nie wyczyścisz pamięci podręcznej.
Zobacz także
- Książka kucharska> Dostęp do bazy danych i ORM> System schematów
- Książka kucharska> Dostęp do bazy danych i ORM> Podstawy bazy danych