2011-05-10 54 views
1

描述/解釋:獲得多個插入的hasMany項目的ID在CakePHP中

在「添加事件」頁面,您可以添加多個計劃。當您saveAll()時,它會保存事件數據和所有計劃數據 - 這是正常工作的。

但是,那麼我想處理日程安排數據並在「日期」表中構建單獨的行。

Event hasMany Schedule 
Schedule belongsTo Event 
Schedule hasMany Date 
Date belongsTo Schedule 

所以 - 我加載日期模型,並通過傳遞每個調度重複,和/插入日期(基於重複,開始日期......等等等等)處理。

我的問題/問題:

我需要每個計劃的ID爲它的日期( 「schedule_id」 字段)。如何在重複播放期間獲取各個時間表的編號?目前,我正在這樣做:

foreach($this->data['Schedule'] as $i => $value) { 
    $this->data['Date']['schedule_id'] = $this->Event->Schedule->id; 
    //other stuff here 
    $this->Date->saveAll($this->data['Date']); 
} 

但是,這給了我在每個循環相同的ID。

回答

1

問題是,$this->Event->Schedule->id只包含插入的最後一個id。這就是爲什麼你總是得到相同的ID。

我想你正在做你的事件控制器的添加功能這個foreach循環。 如果你想要每個自己的insert-id,你不應該在你的Event上做一個saveAll,而是循環每個Schedule(就像你已經做過的那樣),並且把時間表保存在那裏。這可能看起來像這樣:

foreach ($this->data['Schedule'] as $schedule) { 
    $schedule['event_id'] = $this->Event->id; //this is needed because we don't do a saveAll on the Event anymore 
    $this->Event->Schedule->save($schedule); 

    //Here comes your part 
    $this->data['Date']['schedule_id'] = $this->Event->Schedule->id; 
    //other stuff here 
    $this->Event->Schedule->Date->saveAll($this->data['Date']); 
} 

希望這有助於!

+0

它確實有幫助,謝謝。唯一的問題是,它不會像saveAll()一樣驗證它們。有沒有辦法首先驗證它們,然後進行這種類型的保存?非常感謝您的幫助! – Dave 2011-05-11 12:30:23

+0

我相信我回答了我自己的問題 - 你可以手動驗證 - 信息在這裏:http://book.cakephp.org/view/1182/Validating-Data-from-the-Controller – Dave 2011-05-11 12:41:50