使用CakePHP将数据保存到新表

时间:2011-05-20 12:56:29

标签: php mysql cakephp

我有一个订单数据库,并希望在订单完成后将订单保存在新数据库中。我的订单模型有一个包含id,customer,partnumber等的表,而我的OldOrder有一个Order表的副本。

订单完成后,我的计划是将订单数据保存到OldOrder模型,然后从订单模型中删除订单。这样我就可以拥有一个小的当前订单数据库,并让旧订单数据库扩展。

我对最好的方法感到困惑,我的尝试是在我的Order模型中创建一个动作,例如这个(这只是为了将数据复制到OldOrder模型):

function save_order() {
    if(!empty($this->data)){
        $id = $this->data['Order']['id'];
        $this->data = $this->Order->find('first', array('conditions' => array('Order.id' => $id)));
        $this->loadModel('OldOrder');
        $this->OldOrder->save($this->data);
    }
}

然而这不起作用。我没有收到任何错误消息,但没有任何内容保存到OldOrder表中。任何有关这种情况发生的信息或更好的方式来实现我想要做的事情将不胜感激!

编辑:

这是来自操作的SQL转储:

1 SHOW FULL COLUMNS FROM `orders`
2 SELECT CHARACTER_SET_NAME FROM INFORMATION_SCHEMA.COLLATIONS WHERE COLLATION_NAME= 'latin1_swedish_ci';       1   1   4
3 SHOW FULL COLUMNS FROM `users`
4 SELECT `Order`.`customer`, `Order`.`length`, `Order`.`height`, `Order`.`date`, `Order`.`quantity`, `Order`.`order_number`, `Order`.`date_created`, `Order`.`date_dispatched`, `Order`.`id` FROM `orders` AS `Order` WHERE `Order`.`id` = 17 
5 SHOW FULL COLUMNS FROM `old_orders`

1 个答案:

答案 0 :(得分:3)

您需要将订单数据传递给 OldOrder 模型的保存方法,如下所示:

$this->OldOrder->save(array('OldOrder' => $this->data['Order']));

或者您也可以这样做:

$this->OldOrder->set($this->data['Order']);
$this->OldOrder->save();

来自CakePHP documentation

  

CakePHP可以快速保存模型数据。准备保存的数据应使用以下基本格式传递给模型的save()方法:

 Array
 (
     [ModelName] => Array
         (
             [fieldname1] => 'value'
             [fieldname2] => 'value'
         )
 )