Mysql
 sql >> база данни >  >> RDS >> Mysql

CakePHP 3:Най-добра практика за временни SQL таблици

Няма нужда да му казвате не потърсете таблицата, всъщност това е обратното на това, което искате да направите, като се има предвид, че в крайна сметка искате да получите достъп до нея.

Класът на таблицата по принцип трябва да бъде конфигуриран както обикновено и трябва да създадете временната таблица на базата данни, преди приложението да причини достъп до нея. Можете или да напишете SQL за създаване на необработена таблица ръчно, или да го генерирате от \Cake\Database\Schema\TableSchema екземпляр, който поддържа временни таблици.

Можете да създадете изрично обекта на схемата:

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

или оставете обекта на таблицата да го генерира, като използвате вашия масив от дефиниции на полета:

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

След това можете да генерирате SQL за създаване на таблица от обекта на схемата и да го стартирате в базата данни:

$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 ще бъде масив от SQL команди, необходими за създаване на таблицата, нещо от вида на:

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

Имайте предвид, че ако не присвоите схемата на обекта на таблицата, може да срещнете проблеми с кеширането, тъй като кешираната схема няма да съвпада повече, когато промените дефиницията на таблицата и не изчистите кеша.

Вижте също




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql - колко колони са твърде много?

  2. Как да декларирам вътрешна таблица в MySQL?

  3. Общият брой ключалки надвишава размера на таблицата за заключване

  4. Мога ли да използвам колона, която съм избрал по-късно в заявка?

  5. Laravel LeftПрисъединяване къде