2012-07-30 72 views
1

我正在開發一個CodeIgniter網站。這是一種基本的,除了它有一些巨大的形式(150場)一些動態創建/鎖定/預定義/刪除等。CodeIgniter MVC數據操作最佳方法

我有麻煩做表單和數據庫之間的過渡,當然是非常複雜。我的意思是表單的提交在一些表格中插入了多行,並且一些數據甚至沒有保存。 (一些單選按鈕等)

我人爲了利用填補與$_POST數據創建一個非常大的對象與儘可能多的性能儘可能的形式輸入的名字命名的:

foreach ($largeObj as $key=>$value) 
{ 
    if (isset($_POST[$key])){ 
    $largeObj[$key]=$value; //mind the data escaping 
    } 
} 

當然這只是一半的投入工作,換了別人,我需要做這樣的事情:

$largeObj['tanks']=Array(); 
for ($i=0;$i<$_POST['nbrTanks'];$i++){ 
    $tank=new Tank(); 
    // some if's in order to set some properties 
    $largeObj['tanks'][]=$tank; 
} 

然後我做所有的計算和準備我的DTO在每個表中插入相應數據。順便說一句我用PHPDAO來映射數據庫表,因爲它們有點太大,不能寫出整個CRUD操作。

有沒有更好的方法?一些註釋驅動或更有效的方式,因爲我還需要填充來自我的數據庫的數據的整個表單。歡迎任何建議。

回答

1

如果你有那要不要去方法輸入列表,你可以做這樣的事情:

##Array of items to be checked with `isset()` 
$array_isset = array('field1', 'field2', 'field3'); 
foreach ($array_isset as $line) { 
    #.... same thing you did before 
} 

$array_tank = array('field4', 'field5', 'field6'); 
foreach ($array_tank as $line) { 
    $tank = new Tank() 
} 

如果我明白你的問題,上述方法將允許您通過該字段進行排序需要對他們進行的操作。

這就是說,我有多個項目,我不得不處理大量的信息。我發現每一次,我發現最好的方法是找到一種方法將原始數據存入數據庫,並在以後進行計算。

這也很容易,因爲笨,你可以這樣做:

$array = $this->input->post(NULL, True); 
$this->db->insert('table', $array); 

如果你的表單域匹配與您的數據庫列名。

如果你有數據的列表,然後您可以將數據存儲爲這樣一個逗號separted列表:

$array = array('value1', 'value2', 'value3'); 
$insert_string = implode(',', $array); 

而且爆炸當你選擇它。

這可能不適用於您的情況,但它在某些情況下確實有價值。

祝您的申請順利;我希望我幫助!

+0

謝謝..我已經使用$ array = $ this-> input-> post(NULL,True);至於匹配不可能的表單的列。有太多的邏輯正在進行..我試圖讓過渡更有效率:表格 - (保存和操作數據) - >大對象-----(準備DTO的)---->數據庫 – Samson 2012-07-30 22:16:00

+0

那麼我的答案中的第一個代碼片段應該會讓你更簡單,所以你不會執行無意義的代碼迭代。 – David 2012-07-30 22:17:00