CakePHP查找数据但不删除它

时间:2013-05-29 05:09:01

标签: php mysql cakephp

我正在将数据从一个表移动到另一个表,两者都标记相同。一旦数据从orders表转移到archived_orders表,就应该从订单表中删除它

除了名称之外,两个表都具有完全相同的结构。一个叫做订单,另一个是archived_orders

CREATE TABLE `archived_orders` (
  `orderid` int(10) default NULL,
  `userid` int(10) default NULL,
  `order_status` varchar(20) default NULL,
  `email` varchar(50) default NULL,
  `total` varchar(50) default NULL,
  `fullName` varchar(60) default NULL,
  `address` varchar(50) default NULL,
  `city` varchar(50) default NULL,
  `state` varchar(50) default NULL,
  `zip` varchar(15) default NULL,
  `created` datetime default NULL,
  `modified` datetime default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

以下是处理转移和删除的代码

$data = $this->Order->find('all',array(
     'conditions' => array('order_status'=> "filled"
     'userid' => AuthComponent::user('id'))
));
$this->loadModel('ArchivedOrder');
$archived_data = array();
foreach($data as $order => $o) {
     $archived_data[]['ArchivedOrder'] = $o['Order'];  
}
if($this->ArchivedOrder->SaveAll($archived_data)){ 
     $this->Order->deleteAll(array(
       'conditions' => array('order_status'=> "filled",
        'userid' => AuthComponent::user('id'))
    ),$cascade = true, $callbacks = false);
}

数据已成功保存到archived_orders表中,但我收到与删除相关的以下错误。它试图找到标有“id”的列,但我从未指定它。

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Order.id' in 'field list'
SQL Query: SELECT `Order`.`id` FROM `testdb`.`orders` AS `Order` WHERE conditions IN ('filled', '4')

另一件事,我知道这不是正确的解决方案,我不打算使用它,但如果我写出查询

$this->Order->query("delete....");

将删除这些值。是的我知道这不是正确的方法。只是指出它似乎是在搜索不存在的id字段。

1 个答案:

答案 0 :(得分:1)

您的表没有遵循CakePHP约定,即将主键命名为id。

您有两种方法可以解决这个问题:

  1. 将主键从orderid重命名为id。
  2. 在您的订单模型中设置公共var $ primaryKey ='orderid';
  3. 如果这不是传统的应用程序,我会使用选项一。