2012-06-04 159 views
0

我想让cakePHP更新数据库中的一条记录,并创建一个新的记录。我的脚本用“FIRST”进行检查,如果它不返回false,它应该创建一个新记录,否则它应该根据我指定的ID更新现有的记录。我在下面有意添加了$ this-> Asset-> id = 62;尝试强制更新,但不起作用。任何帮助? (另外,如果你能明白它该做的,请随时引导我,也许是更好的代码:)很新的蛋糕:cakePHP没有更新记录

public function index() { 

     if($this->request->is("post")) { 
      $aid = $this->request->data['Asset']['asset_identifier']; 
      $type = $this->request->data['Asset']['asset_type_id']; 
      $asset = $this->Asset->find("first",array("fields" => array("Asset.id", "Asset.user_id", "Asset.status_id", "Asset.financial_id", "Asset.insurance_id"),"conditions" => array("Asset.asset_identifier" => $aid, "Asset.asset_type_id" => $type))); 
      if($asset != false) { 
       $uid = $this->Auth->user("id"); 
       // UPDATE, depends on info: 
       $this->Asset->id = $asset['Asset']['id']; 
       foreach(array("financial_id", "insurance_id", "user_id") as $value) { 
        if($asset['Asset'][$value] != 0) { 
         $emails[] = $asset['Asset'][$value]; 
        } 
       } 
       if(isset($emails) && count($emails)) { 
        $this->request->data['Asset']['status_id'] = 1; 
        $email = new CakeEmail(); 
        $email->from(array('[email protected]' => 'Assetchase.co.za')); 
        $email->subject('Assetchase.co.za result notification.'); 
        foreach($emails as $value) { 
         $user = $this->User->find("first",array("fields" => array("username"),"conditions" => array("id" => $value))); 
         $email->to($user['User']['username']); 
         $email->send('A new notification, booyah!'); 
         // Send an email with the username. 
        } 
       } 
       if($this->Auth->user("user_type_id") == 2) { 
        $this->request->data['Asset']['user_id'] = $uid; 
       } elseif($this->Auth->user("user_type_id") == 3) { 
        $this->request->data['Asset']['financial_id'] = $uid; 
       } elseif($this->Auth->user("user_type_id") == 4) { 
        $this->request->data['Asset']['insurance_id'] = $uid; 
       } 
      } 
      $this->Asset->id = 62; 
      if($this->Asset->saveAll($this->request->data)) { 
       $this->Session->setFlash("A new asset has been loaded",'success'); 
       $this->redirect(array("controller" => "asset", "action" => "thankyou", "guest")); 
      } else { 
       $this->Session->setFlash('An error has occured.','default',array('class'=>'error')); 
      } 
     } 
     $assetTypes = $this->Asset->AssetType->find('list'); 
     $this->set("assetTypes", $assetTypes); 

    } 

回答

0

当你调用$this->Asset->saveAll($this->request->data)你告诉蛋糕采取POST数据并尝试保存它。它没有看到$this->Asset,你完全可以将ID设置为62。您可以通过检查var_dump($this->request->data)的输出来验证。改为尝试类似$this->request->data['Asset']['id'] = 62