sql >> Base de Datos >  >> RDS >> Mysql

CakePHP 3:mejores prácticas para tablas SQL temporales

No hay necesidad de decirle que no busca la tabla, en realidad eso es lo contrario de lo que quieres hacer, dado que eventualmente quieres acceder a ella.

La clase de tabla básicamente debe configurarse como de costumbre, y debe crear la tabla de base de datos temporal antes de que la aplicación haga que se acceda a ella. Puede escribir el SQL de creación de tablas sin procesar manualmente o generarlo desde un \Cake\Database\Schema\TableSchema instancia, que admite tablas temporales.

Puede crear explícitamente el 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);

o deje que el objeto de la tabla lo genere, usando su matriz de definición de campos:

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

A continuación, puede generar el SQL de creación de tablas a partir del objeto de esquema y ejecutarlo en la base de datos:

$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 sería una serie de comandos SQL necesarios para crear la tabla, algo así como:

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

Tenga en cuenta que si no asigna el esquema al objeto de la tabla, podría tener problemas de almacenamiento en caché, ya que el esquema almacenado en caché ya no coincidiría cuando cambie la definición de la tabla y no borre el caché.

Véase también