2013-01-05 81 views
2

我有在可具有多個值的CakePHP的形式的複選框。在視圖:CakePHP中:提交多個複選框輸入到數據庫中

<?php // Multiple checkbox form 
     echo $this->Form->input('report_types', array(
     'type'=>'select', 
     'label'=>'Report Type(s)', 
     'multiple'=>'checkbox', 
     'options'=>array(
      'option 1'=>'option 1', 
      'option 2'=>'option 2', 
      'option 3'=>'option 3', 
     ), 
)); ?> 

當我這樣加載到它返回一個「列未找到:1054未知列在‘字段列表’陣'」數據庫錯誤,因爲它試圖在它應該增加一個陣列是一個字符串。

我試圖轉換$this->request->data即以陣列形式爲一個字符串的任何,但干擾了日期選擇我先前的形式(它們被存儲爲陣列以及)。

我也試着將多個複選框字段的值轉換爲模型中的beforeValidate()方法中的字符串,但是當我需要「解包」數據時,它需要太多重複並且變得雜亂:

<?php class Request extends AppModel { 
    ... 
    function beforeValidate() { 
     if(!empty($this->request->data['Request']['attachment_types'])) { 
      $this->data['Request']['attachment_types'] = implode(',', $this->data['Request']['attachment_types']); 
     } 
     if(!empty($this->request->data['Request']['report_types'])) { 
      $this->data['Request']['report_types'] = implode(',', $this->data['Request']['attachment_types']); 
     } 
     // Am I going to have to keep adding if-statements here? 
     }?> 

此外,!empty()方法不起作用,因爲該領域將永遠是空的(由於自動創建的隱藏字段時,CakePHP可以一個複選框輸入)。

沒有人有任何想法,我怎麼可以提交多個複選框輸入到數據庫中?這似乎是一個非常溫和的請求...... CakePHP在這方面有什麼「automagic」技能?

+0

你是什麼「report_types」列的數據類型?一個集合,或一個varchar被濫用爲集合?在這種情況下,我認爲這是去(我碰到了同樣的問題)的唯一途徑 – JvO

+0

嗨,於麻醉!感謝您的答覆。我已經將數據類型更改爲一個集合(由複選框選項的值定義)並將該數組傳遞給數據庫 - 但仍然收到相同的錯誤。是否有一些額外的步驟我失蹤?我需要以某種方式序列化數據嗎? – CSamp

+0

是的,你必須自己序列化它。在重新閱讀我的評論時,我意識到它不是很清楚。無論如何,將它改成一個集合都無濟於事(不要與Cake一起);我的意思是說我也必須使用內爆/爆炸功能。還要注意一個集合不是標準的SQL,而是一個MySQL擴展。 – JvO

回答

0

爲了解決這個問題,我改變了數據類型的數組中的一組被定義爲我的數據庫('option 1','option 2','option 3)的選項。如果您的數據庫中沒有「設置」數據類型,那沒關係。然後,我修改了我的beforeValidate()函數以序列化數據。在上面的例子中

<?php class Request extends AppModel { 
... 
function beforeValidate() { 
    if($this->request->data['Request']['attachment_types']!=0) { 
     $this->data['Request']['attachment_types'] = implode(',', $this->data['Request']['attachment_types']); 
    } 
    if($this->request->data['Request']['report_types']!=0) { 
     $this->data['Request']['report_types'] = implode(',', $this->data['Request']['report_types']); 
    } 
    // Yes, I will just have to keep adding if-statements :(
    }?> 

注意我曾與複選框兩個字段(「report_types」和「attachment_types」),它解釋了爲什麼我有兩個if語句。

感謝您於麻醉的幫助!

相關問題