我正在尝试在CakePHP 2.x中创建一个临时表,但我总是收到消息“错误:调用非对象上的成员函数查询()”。
我做了一些研究并找到了一个解决方案,但这个解决方案对我不起作用:Create temporary table in CakePHP and load it as a Model
编辑: 以下代码现在产生一个不同的错误:“错误:在数据源默认情况下找不到模型DevicesCl的表devices_cls。”
这是我的代码:
class DevicesController extends AppController {
public $uses = array('Device','Client');
public function index(){
$conditions = array();
$tmpModel = 'DevicesCl';
$tmpTable = 'devices_cls';
$this->loadModel('DevicesCl');
$this->DevicesCl->query("CREATE TEMPORARY TABLE IF NOT EXISTS devices_cls AS (SELECT uuid,ownerUuid,status,os,imei,updatedOn,msisdn,model FROM device)" );
由于我是CakePHP的新手,我是否需要添加其他模型类?我不这么认为,因为这应该由临时表处理 - 对吗?
感谢您的支持!
答案 0 :(得分:2)
class DevicesController extends AppController {
public $uses = array('Device','Client');
public function index(){
$conditions = array();
$tmpModel = 'DevicesCl';
$tmpTable = 'devices_cls';
$this->loadModel('DevicesCl');
$this->DevicesCl->useTable=false;
$this->DevicesCl->query("CREATE TEMPORARY TABLE IF NOT EXISTS devices_cls AS (SELECT uuid,ownerUuid,status,os,imei,updatedOn,msisdn,model FROM device)" );
$this->DevicesCl->useTable = $tmpTable;
答案 1 :(得分:0)
问题在于Model" DevicesCl"还不存在。
链接中的示例中的:模型存在
所以,如果你改变了
$this->DevicesCl->query(...)
到
$this->Model->query(...)
但我不明白为什么你需要这样的功能......我认为肯定有最好的解决方案吗?
答案 2 :(得分:0)
在Cakephp 3中,您可以执行以下操作:
Model/Table/MyTempTable.php
<?php
// ......
class MyTempTable extends Table{
public function initDownload(){
$connection = ConnectionManager::get('default');
$connection->execute('CREATE TEMPORARY TABLE temptemp as (select * from refernece_db)');
// Do your thing
}
}
// When use the temp table, first should do:
$this->MyTempTable->initDownload();
// Then, can use Cakephp3 Table syntax normally as if it is a normal table