Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP未正确保存条目_Php_Mysql_Cakephp - Fatal编程技术网

CakePHP未正确保存条目

CakePHP未正确保存条目,php,mysql,cakephp,Php,Mysql,Cakephp,我试图将多行从一个表复制到另一个表,但它只保存我选择的最后一个条目。当我打印数据数组时,所有内容都显示出来。我复制到的表没有设置自动增量,这是我猜测的原因,所以现在我很困惑 foreach($this->request->data['Order']['archive_value'] as $orderid){ $data = $this->Order->query("select * from orders where orderid = '$orderid'")

我试图将多行从一个表复制到另一个表,但它只保存我选择的最后一个条目。当我打印数据数组时,所有内容都显示出来。我复制到的表没有设置自动增量,这是我猜测的原因,所以现在我很困惑

foreach($this->request->data['Order']['archive_value'] as $orderid){
    $data = $this->Order->query("select * from orders where orderid = '$orderid'");
    $newdata = array(
        'ArchivedOrder' => array(
                'orderid' => $data[0]['orders']['orderid'],
                'id' => $data[0]['orders']['id'],
                'order_status' => $data[0]['orders']['order_status'],
                'email' => $data[0]['orders']['email'],
                'total' => $data[0]['orders']['total'],
                'fullName' => $data[0]['orders']['fullName'],
                'address' => $data[0]['orders']['address'],
                'city' => $data[0]['orders']['city'],
                'state' => $data[0]['orders']['state'],
                'zip' => $data[0]['orders']['zip'],
                'created' => $data[0]['orders']['created'],
                'modified' => $data[0]['orders']['modified']  
        ));
        print_r($newdata); //this shows every entry that I look up, but it's not saving them properly
        $this->loadModel('ArchivedOrder');
        $this->ArchivedOrder->save($newdata);
        ///$this->Order->query("delete from orders where orderid = '$orderid'");
}
当我从PHPMyAdmin中转储表结构时,会显示以下内容

CREATE TABLE `archived_orders` (
  `orderid` int(10) default NULL,
  `id` 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;
根据CakePHP手册:

在循环中调用save时,不要忘记调用create()

在foreach循环中执行
loadModel
也可能不是一个好主意

// load the model

// foreach loop

    // build the data
    $this->ArchivedOrder->create();
    $this->ArchivedOrder->save($newdata);

    //...
根据CakePHP手册:

在循环中调用save时,不要忘记调用create()

在foreach循环中执行
loadModel
也可能不是一个好主意

// load the model

// foreach loop

    // build the data
    $this->ArchivedOrder->create();
    $this->ArchivedOrder->save($newdata);

    //...

该代码存在多个问题

  • 不要使用query()。。。在SQL注入之前,您的代码是不安全的,您将丢失数据库抽象。使用find()
  • 不是问题,但是。。。print\u r-CakePHP提供了debug(),它比普通的print\u r好得多
  • 不要使用save(),使用saveAll(),读取。无需将数据保存在循环中
  • 90%的代码应该进入模型,而不是控制器

该代码存在多个问题

  • 不要使用query()。。。在SQL注入之前,您的代码是不安全的,您将丢失数据库抽象。使用find()
  • 不是问题,但是。。。print\u r-CakePHP提供了debug(),它比普通的print\u r好得多
  • 不要使用save(),使用saveAll(),读取。无需将数据保存在循环中
  • 90%的代码应该进入模型,而不是控制器

在OrdersController下授予您的

$newdata = array();
foreach($this->request->data['Order']['archive_value'] as $orderid){
    $data = $this->Order->find('all',array('conditions'=>array('orderid'=>$orderid)));
    if(count($data) > 0){
    $newdata[] = array(
        'ArchivedOrder' => array(
                'orderid' => $data[0]['Order']['orderid'],
                'id' => $data[0]['Order']['id'],
                'order_status' => $data[0]['Order']['order_status'],
                'email' => $data[0]['Order']['email'],
                'total' => $data[0]['Order']['total'],
                'fullName' => $data[0]['Order']['fullName'],
                'address' => $data[0]['Order']['address'],
                'city' => $data[0]['Order']['city'],
                'state' => $data[0]['Order']['state'],
                'zip' => $data[0]['Order']['zip'],
                'created' => $data[0]['Order']['created'],
                'modified' => $data[0]['Order']['modified']  
        ));
     }


}
if(count($newdata) > 0){
      $this->loadModel('ArchivedOrder');
      print_r($newdata); //this shows every entry that I look up, but it's not saving them properly
      foreach($newdata as $order):
         $this->ArchivedOrder->id = $order['ArchivedOrder']['id'];
          if($this->ArchivedOrder->exists()){
               echo 'Entered Already';
          }else{
               $this->ArchivedOrder->create();
               if($this->ArchivedOrder->save($order)){

               }else{echo 'error'; return false;}
          }
      endforeach;
}
unset($newdata);

在OrdersController下授予您的权限

$newdata = array();
foreach($this->request->data['Order']['archive_value'] as $orderid){
    $data = $this->Order->find('all',array('conditions'=>array('orderid'=>$orderid)));
    if(count($data) > 0){
    $newdata[] = array(
        'ArchivedOrder' => array(
                'orderid' => $data[0]['Order']['orderid'],
                'id' => $data[0]['Order']['id'],
                'order_status' => $data[0]['Order']['order_status'],
                'email' => $data[0]['Order']['email'],
                'total' => $data[0]['Order']['total'],
                'fullName' => $data[0]['Order']['fullName'],
                'address' => $data[0]['Order']['address'],
                'city' => $data[0]['Order']['city'],
                'state' => $data[0]['Order']['state'],
                'zip' => $data[0]['Order']['zip'],
                'created' => $data[0]['Order']['created'],
                'modified' => $data[0]['Order']['modified']  
        ));
     }


}
if(count($newdata) > 0){
      $this->loadModel('ArchivedOrder');
      print_r($newdata); //this shows every entry that I look up, but it's not saving them properly
      foreach($newdata as $order):
         $this->ArchivedOrder->id = $order['ArchivedOrder']['id'];
          if($this->ArchivedOrder->exists()){
               echo 'Entered Already';
          }else{
               $this->ArchivedOrder->create();
               if($this->ArchivedOrder->save($order)){

               }else{echo 'error'; return false;}
          }
      endforeach;
}
unset($newdata);

没用。我最后只是使用$this->ArchivedOrder->query(“插入…”)来让它工作。@user1443519-不要使用“插入…”先学会正确使用蛋糕。不起作用。最后,我只是使用$this->ArchivedOrder->query(“插入…”)让它工作。@user1443519-不要使用“插入…”先学习如何正确使用蛋糕。你能指定模型中应该包含什么吗?仅仅说“90%没有多大帮助。”你能指定模型中应该包含什么吗?仅仅说“90%是没有多大帮助的。”