इसे नहीं को बताने की कोई आवश्यकता नहीं है तालिका की तलाश करें, वास्तव में आप जो करना चाहते हैं उसके विपरीत है, यह देखते हुए कि आप अंततः इसे एक्सेस करना चाहते हैं।
टेबल क्लास को मूल रूप से हमेशा की तरह कॉन्फ़िगर किया जाना चाहिए, और एप्लिकेशन को एक्सेस करने से पहले आपको अस्थायी डेटाबेस टेबल बनाना चाहिए। आप या तो कच्चे टेबल निर्माण एसक्यूएल को मैन्युअल रूप से लिख सकते हैं, या इसे \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`)
)'
]
ध्यान दें कि यदि आप तालिका ऑब्जेक्ट को स्कीमा निर्दिष्ट नहीं करते हैं, तो आप कैशिंग समस्याओं का सामना कर सकते हैं, क्योंकि जब आप तालिका की परिभाषा बदलते हैं और कैशे साफ़ नहीं करते हैं तो कैश्ड स्कीमा अब मेल नहीं खाएगा।
यह भी देखें