2012-07-28 51 views
1

我參考了http://agiletoolkit.org/codepad/newsletter的2步通訊示例。我將這個例子修改爲一個4步的過程。下面的頁面類是第1步,它可以插入新記錄並獲取新記錄ID。問題是我不想在數據庫中插入這條記錄直到最後一步。我不知道如何在不使用save()函數的情況下檢索此ID。任何想法都會有所幫助。atk4.2表單提交 - 如何在插入以傳入參數之前獲取新記錄ID

class page_Ssp_Step1 extends Page { 
    function init(){ 
     parent::init(); 

     $p=$this; 

     $m=$p->add(Model_Publishers); 
     $form=$p->add('Form'); 
     $form->setModel($m); 
     $form->addSubmit(); 
     if($form->isSubmitted()){ 

     $m->save();//inserts new record into db. 
     $new_id=$m->get('id');//gets id of new record 
     $this->api->memorize('new_id',$new_id);//carries id across pages 
     $this->js()->atk4_load($this->api->url('./Step2'))->execute(); 
     } 
    } 
} 

回答

1

有幾種方法可以做到這一點,無論是使用atk4功能,mysql事務或作爲應用程序設計的一部分。


1)管理ID列自己

我假設你正在使用MySQL中的自動增量列,這樣一個選擇是不會做這種自動遞增,但使用序列並選擇下一個值並保存這個你背誦的語句,並在模型中作爲默認值使用它添加 - >默認值($這個 - > API - >召回(「NEW_ID」)


2)關閉自動提交,並創建圍繞插入的交易

我來自Oracle背景而不是MySQL,但MySQL也允許您在事務中包裝幾個語句,它可以保存所有內容或回滾,所以如果您可以創建一個事務,那麼您仍然可以保存,但是如果所有步驟都完成,則只會提交填充多個表的完整事務。

在atk 4.1中,DBlite/mysql.php類包含一些用於事務支持的功能,但agiletoolkit.org上的文檔不完整,您不清楚如何更改當前連接到lib/Frontend中的數據庫時使用的dbConnect。 php使用$ this-> dbConnect(),但沒有選項可以傳遞參數。

看起來你可能能夠做必要的交易在第一頁需要

$this->api->db->query('SET AUTOCOMMIT=0'); 
$this->api->db->query('START TRANSACTION'); 

然後做各種頁面插入的開始使用該命令。請注意,所做的一切都將包含在transaccion中,因此如果用戶不完成該過程,則不會保存任何內容。
在最後插入,

$this->api->db->query('COMMIT'); 

然後幫助,如果你想,重新打開自動提交,以每個SQL語句致力於

$this->api->db->query('SET AUTOCOMMIT=1'); 

我還沒有試過,但有希望。


3)使用beforeInsert或afterInsert

你也可以看看重寫你的模型具有數據的數組beforeInsert功能,但我認爲,如果你的ID是自動遞增列,直到插入了Id參數的afterInsert函數纔會有值。


4)使用狀態,表明完整記錄

最後,你可以使用一個狀態欄上的記錄表明,只有在第一階段也只有這一點得到更新,以完整的狀態當最後階段完成時。然後,您可以有一個持續運行的家務管理工作,以刪除未完成所有階段的記錄。任何顯示這些記錄的網格或粗糙部分都將受限於模型中的AddCondition('status','C')或添加到頁面中,以便不完整的部分永遠不會顯示。

5)管理事務,非SQL

正如羅馬人的建議,你可以直接存儲在會話變量的形式處理的結果,而不是到數據庫,然後使用SQL插入一次最後一步完成。

+1

感謝Trevor,爲了快速響應。我對交易方式感興趣。我會研究它併發布任何有助於他人嘗試學習這個偉大的框架。再次感謝 – 2012-07-29 03:24:45

+0

爲了使它工作,您需要將數據臨時保存到會話中。看看:http://agiletoolkit.org/codepad/nosql存儲會話中的數據。你可能會覺得這很有幫助。 – romaninsh 2012-07-29 04:38:37

相關問題