遇驗証錯誤時 array 中 hasMany 的會不見

edited 十月 2013 in CakePHP
大家好:
我有兩個Model 一個叫Order另一個叫OrderDetail
而Order 是 hasMany OrderDetail的關系

而一般我用$this->Order->read(null,$id) 得到的array資料是
----------------------------
[Order]
id = 1
name = xxx
[OrderDetail]
id = 2
name = xxx
------------------------------
可是當我要edit Order的資料,而遇到驗証錯誤(如:必填欄位沒有填時)

[Order]
id = 1
name = ' ' >
not empty !!!!

原本的OrderDetail array 就會不見
請問我要如果保留OrderDetail?
並且為什麼驗証錯誤後hasMany 的相關array都會不見呢

謝謝大家QQ

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=6754

評論

  • edited 七月 2012
    也許用 Containable 方式比較保險?
    $this->Order->find('first', array(
        'conditions' => array('Order.id' => $id),
        'contain' => array('OrderDetail'),
    ));
    
  • edited 七月 2012
    好像沒有效~因為我用是 bake 產生admin_edit 出來的流程做一點調整

    它一開始流程是,如果$this->data沒有資料則,撈出資料
    		if (empty($this->data)) {
    			$this->data = $this->Order->find('first', array( 
    							'conditions' => array('Order.id' => $id), 
    							'contain' => array('OrderDetail'), 
    						));	
              
    			
    		}
    
    再回到view去,這次$this->data有資料了,並且在使用者view的地方做了動作,也就是故意把必填的欄位,沒有填任何資料,再回到controller去
    這次就完全沒有從資料庫撈資料了,它完全只用了view的FORM裡面用到的input 欄位,也就是說不止是hasMany的MOdel會不見,連自已的model,如果你的FORM的input欄位不齊的話,也不會帶過來
    		if (!empty($this->data)) {			
    
    			if ($this->Order->save($this->data)) {
    				$this->Session->setFlash(__('資料已儲存。', true));
    				$this->redirect(array('action' => 'index'));
    			}
    
    		}
    
  • edited 七月 2012
    請善用 array_merge() 囉,預設給的東西很陽春
Sign In or Register to comment.