我使用cakephp $this->Model->query()
创建了一个临时表,并使用相同的$this->Model->query()
插入了一些记录。我想分页临时表。我按如下方式加载了临时模型。
App::import('Model', $tmpModel);
$this->loadModel($tmpModel);
参考网址: Create temporary table in CakePHP and load it as a Model
不幸的是,分页没有发生,我收到了以下错误。
找不到型号“型号名称”的数据库表“表名”。虽然表名和模型名是按照cakephp惯例编写的。
可能的解决办法是什么。
答案 0 :(得分:1)
我几乎可以肯定你无法使用临时表来做到这一点。这是因为Cake的底层架构缓存使用MySql的' SHOW TABLES ',不返回临时表 - 因此您将始终获得“数据库表未找到型号“型号名称”的“表名”“
因此,我的建议是创建一个标准表,然后在完成后删除它。以下是可以从“用户”控制器调用的示例:
// Define temporary model
$tempModel = 'TempUser';
// Create table
$this->User->query("CREATE TABLE IF NOT EXISTS `". Inflector::tableize($tempModel) ."` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '',
`email` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
// load the model
$this->loadModel($tempModel);
/**
* Prevent caching of database schema and then get
* the latest schema that includes our new table
*/
$this->$tempModel->cacheSources = false;
$this->$tempModel->schema();
// Save
$this->$tempModel->save(array(
$tempModel => array(
'name' => 'Testing',
'email' => 'joe.bloggs@google.co.uk'
)
));
// Paginate
$data = $this->paginate($tempModel);
// Drop Table
$this->User->query("DROP TABLE `". Inflector::tableize($tempModel) ."`");
答案 1 :(得分:0)
我在创建tmp模型后用su来插入记录。
这里的问题是缓存,尝试删除缓存,它可能会起作用。
要阻止蛋糕缓存您的查询,您可以使用cacheQueries = false;我没有尝试过这最后一件事,但你缓存是问题,因为它缓存当前架构(没有临时表),然后当它确实存在时它找不到它,因为它使用缓存:S
答案 2 :(得分:0)
可能有分页工作,'秘密'是为临时表创建一个模型并覆盖模型中的'setSource'函数,以便不根据缓存的表列表检查表名(它创建的很多更早)。
请在此处查看我的回答以及更多详情:CakePHP can't find table after creating a table
非常感谢任何发布http://web2.0goodies.com/blog/uncategorized/mysql-temporary-tables-and-cakephp-1-3/的人提供的线索。
请注意,此方法也适用于即时创建的非临时表。