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. SQL Server:一部の日にはデータが存在しない場合でも、日付範囲内のすべての日を選択する方法

    2. MariaDBでのCONCAT()のしくみ

    3. mysqlの正規表現を使用して、偶数の文字または奇数の文字をどのように照合しますか

    4. mysqlのデフォルトポートを3306から3360に変更する方法