CakePHP:创建临时表并使用它

时间:2014-11-21 10:23:02

标签: cakephp

我正在尝试在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的新手,我是否需要添加其他模型类?我不这么认为,因为这应该由临时表处理 - 对吗?

感谢您的支持!

3 个答案:

答案 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